c# ist kein marketing, c# ist eine programmiersprache für das .NET framework, welches eine gemeinsame klassenbibliothek für einen ganzen haufen von programmiersprachen bietet.
es ist eine neue programmiersprache, die , wie hier schon beschrieben, andere einsatzfelder hat als c++. z.b. wird c++ nicht so oft in kritischen bereichen z.b. banken verwendet, weil es zu unsicher ist. dort kann man c# gut einsetze, im moment wird aber noch sehr viel mit java gemacht.
c# basiert auf c++. ob es jetzt besser ist als c++, kann man nicht sagen. es ist in manchen bereichen geeigneter, in anderen wiederum nicht.
salve
ich möchte ein wenig in die materie der grafikprogrammierung mittels directx eintauchen, habe mir dazu das directX SDK besorgt. desweiteren habe ich mich auch durch das directx tutorial von hauptmann durchgeschlagen, bis zu dem punkt , an dem matrizen behandelt werden, also gezeichnete objekte quasi gedreht werden.
in dem sdk tutorial 1 wurde ein fenster mit blauem grund erzeugt und un tutorial 2 ein dreieck gezeichnet.
schön und gut, habeich hinbekommen und kann es auch einigermaßen nachvollziehen.
doch wenn es um bewegung geht, komme ich nicht mehr weiter. leider beschreiben das sdk tutorial und hauptmanns es für mich nicht leicht genug.
vor allem der sprung von teil 2 zu 3 ist schwer.
hier einmal der code aus dem 2ten teil, der ein dreieck rendert:
//-----------------------------------------------------------------------------
// File: Vertices.cs
//
// Desc: In this tutorial, we are rendering some vertices. This introduces the
// concept of the vertex buffer, a Direct3D object used to store
// vertices. Vertices can be defined any way we want by defining a
// custom structure and a custom FVF (flexible vertex format). In this
// tutorial, we are using vertices that are transformed (meaning they
// are already in 2D window coordinates) and lit (meaning we are not
// using Direct3D lighting, but are supplying our own colors).
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
namespace VerticesTutorial
{
public class Vertices : Form
{
// Our global variables for this project
Device device = null; // Our rendering device
VertexBuffer vertexBuffer = null;
public Vertices()
{
// Set the initial size of our form
this.ClientSize = new System.Drawing.Size(300,300);
// And its caption
this.Text = "Direct3D Tutorial 2 - Vertices";
}
public bool InitializeGraphics()
{
try
{
// Now let's setup our D3D stuff
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed=true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
this.OnCreateDevice(device, null);
return true;
}
catch (DirectXException)
{
return false;
}
}
public void OnCreateDevice(object sender, EventArgs e)
{
Device dev = (Device)sender;
// Now Create the VB
vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColored), 3, dev, 0, CustomVertex.TransformedColored.Format, Pool.Default);
vertexBuffer.Created += new System.EventHandler(this.OnCreateVertexBuffer);
this.OnCreateVertexBuffer(vertexBuffer, null);
}
public void OnCreateVertexBuffer(object sender, EventArgs e)
{
VertexBuffer vb = (VertexBuffer)sender;
GraphicsStream stm = vb.Lock(0, 0, 0);
CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[3];
verts[0].X=150;verts[0].Y=50;verts[0].Z=0.5f; verts[0].Rhw=1; verts[0].Color = System.Drawing.Color.Aqua.ToArgb();
verts[1].X=250;verts[1].Y=250;verts[1].Z=0.5f; verts[1].Rhw=1; verts[1].Color = System.Drawing.Color.Brown.ToArgb();
verts[2].X=50;verts[2].Y=250;verts[2].Z=0.5f; verts[2].Rhw=1; verts[2].Color = System.Drawing.Color.LightPink.ToArgb();
stm.Write(verts);
vb.Unlock();
}
private void Render()
{
if (device == null)
return;
//Clear the backbuffer to a blue color (ARGB = 000000ff)
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
//Begin the scene
device.BeginScene();
device.SetStreamSource( 0, vertexBuffer, 0);
device.VertexFormat = CustomVertex.TransformedColored.Format;
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
//End the scene
device.EndScene();
device.Present();
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
this.Render(); // Render on painting
}
protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
this.Close(); // Esc was pressed
}
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
using (Vertices frm = new Vertices())
{
if (!frm.InitializeGraphics()) // Initialize Direct3D
{
MessageBox.Show("Could not initialize Direct3D. This tutorial will exit.");
return;
}
frm.Show();
// While the form is still valid, render and process messages
while(frm.Created)
{
frm.Render();
Application.DoEvents();
}
}
}
}
}
im 3. teil gibt es jetzt aber einige änderungen, die ich nicht auf die reihe kriege. transformedcolored und positioncolored verstehe ich noch. woran es aber hapert sind z.b. die verts.
verts[0].X=-1.0f; verts[0].Y=-1.0f; verts[0].Z=0.0f; verts[0].Color = System.Drawing.Color.DarkGoldenrod.ToArgb();
verts[1].X=1.0f; verts[1].Y=-1.0f ;verts[1].Z=0.0f; verts[1].Color = System.Drawing.Color.MediumOrchid.ToArgb();
verts[2].X=0.0f; verts[2].Y=1.0f; verts[2].Z = 0.0f; verts[2].Color = System.Drawing.Color.Cornsilk.ToArgb();
wieso sind das hier so kleine koordinaten, und nicht wie im teil davor z.b. 150 oder so und was soll das f dahinter. ic glaube das heisst float, aber kann man sich das nicht sparen ?
so das war eine neureung, jetzt die andere. bevor man rendert, wird die funktion SetupMatrices() aufgerufen, die glaube ich dafür sorgt, dass sich das objekt scheinbar dreht. dreht sich eigentlich das objekt oder dreht sich die kamera ?
int iTime = Environment.TickCount % 1000;
float fAngle = iTime * (2.0f * (float)Math.PI) / 1000.0f;
device.Transform.World = Matrix.RotationY( fAngle );
device.Transform.View = Matrix.LookAtLH( new Vector3( 0.0f, 3.0f,-5.0f ), new Vector3( 0.0f, 0.0f, 0.0f ), new Vector3( 0.0f, 1.0f, 0.0f ) );
device.Transform.Projection = Matrix.PerspectiveFovLH( (float)Math.PI / 4, 1.0f, 1.0f, 100.0f );
also da versteh ich ja garnichts mehr. wo ist denn da irgendwo eine funktion, die das bild alle x sekunden dreht ?
und ich verstehe eigentlich die komplette funktion nicht.
vielleicht könnt ihr ja ein wenig licht ins dunkle bringen.
danke im vorraus
mfg
(8(|)
du musst am ende des programms seinen tcplistener zumachen:
t.stop();
(8(|)
System.Text.Encoding.Default sollte das richtige sein
Gruß
(8(|)
Hi
also du machst pro form ja eine klasse, sprich eine datei.
einmal deine mainform
und deine form, an die die parameter übergben willst.
die parameterform sieht dann ungefähr so aus
class MeineForm
{
private string parameterKopie;
public MeineForm(string parameter) //KOnstruktur
{
parameterKopie=parameter;
}
}
von deiner hauptform, übergibst du den parameter im konstruktor:
MeineForm meineForm1 = new MeineForm("STRING-TANGA");
meineForm1.Show();
feddich
(8(|)
hm also wenn ich die objekte mithilfe von Items.Add() hinzufüge, stehen in der listbox die instanznamen. ich möchte aber, dass dort eine string variable des objekts steht, und wenn man dadrauf klickt, auf andre variablen des objekts zugreifen kann.
mfg (8(|)
huhudele
also zu meinem problemchen:
ich habe eine klasse NewsFeed, welche eine ArrayList mit lauter objekten von NewsEintrag enthält. ( es handelt sich um rss reader ). die klasse newseintrag enthält string variablen u.a. den Titel des NewsEintrags und die url.
ich befülle nun die listbox mit titeln der newseinträge. ich möchte es nun erreichen, dass , wenn ich auf einen eintrag in der liste klicke, ich auf die url variable des pbjektes zugreifen kann.
wie bewerkstellige ich das?
danke für eure hilfe
mfg (8(|)
ja schon klar aber das komische ist, dass ich die heise datei garnicht auslesen kann. //item z.b. funktioniert nicht.
aber ich sehe bei den dateien gar keinen großen unterschied 🙁
mfg (8(|)
hi leute,
ich habe den entschluss gefasst, meinen horizont ein wenig zu erweitern und wollte erstmal einen simplen rss reader schreiben.
es ist mir soweit auch geglückt mit folgendem code, alle titel vom winfuture.de rss feed zu holen:
http://www.media-designs.de/winfuture.rdf
XmlNodeList nl = xmlread.SelectNodes("//item/title");
foreach(XmlNode n in nl)
{
textBox1.Text+=n.InnerText + "\r\n";
klappt perfekt. nur wenn ich jetzt den RSS feed von heise.de auslesen will
http://www.heise.de/newsticker/heise.rdf
bleibt meine textbox leer.
woran liegt das ?
danke