Hallo zusammen.
Bin absoluter Anfänger was Direct3D-Programmierung betrifft. Habe es aber mitlerweile geschafft eine Box, abhängig von Länge, Breite und Höhe erstellen zu können (siehe Code).
public MeshObjBox(Device device, float length, float width, float height, Material mat, Texture texture)
{
float lh = length / 2, wh = width / 2, hh = height / 2;
CustomVertex.PositionNormalTextured[] verts = new CustomVertex.PositionNormalTextured[]
{
// Boden
new CustomVertex.PositionNormalTextured(-lh, -hh, -wh, 0, 1, 0, -lh, -wh),
new CustomVertex.PositionNormalTextured( lh, -hh, wh, 0, 1, 0, lh, wh),
new CustomVertex.PositionNormalTextured( lh, -hh, -wh, 0, 1, 0, lh, -wh),
new CustomVertex.PositionNormalTextured(-lh, -hh, wh, 0, 1, 0, -lh, wh),
// Decke
new CustomVertex.PositionNormalTextured(-lh, hh, -wh, 0, -1, 0, -lh, -wh),
new CustomVertex.PositionNormalTextured( lh, hh, wh, 0, -1, 0, lh, wh),
new CustomVertex.PositionNormalTextured( lh, hh, -wh, 0, -1, 0, lh, -wh),
new CustomVertex.PositionNormalTextured(-lh, hh, wh, 0, -1, 0, -lh, wh),
// Vorderseite
new CustomVertex.PositionNormalTextured(-lh, -hh, -wh, 0, 0, -1, -lh, -hh),
new CustomVertex.PositionNormalTextured( lh, hh, -wh, 0, 0, -1, lh, hh),
new CustomVertex.PositionNormalTextured( lh, -hh, -wh, 0, 0, -1, lh, -hh),
new CustomVertex.PositionNormalTextured(-lh, hh, -wh, 0, 0, -1, -lh, hh),
// Rückseite
new CustomVertex.PositionNormalTextured(-lh, -hh, wh, 0, 0, 1, -lh, -hh),
new CustomVertex.PositionNormalTextured( lh, hh, wh, 0, 0, 1, lh, hh),
new CustomVertex.PositionNormalTextured( lh, -hh, wh, 0, 0, 1, lh, -hh),
new CustomVertex.PositionNormalTextured(-lh, hh, wh, 0, 0, 1, -lh, hh),
// Linke Seite
new CustomVertex.PositionNormalTextured(-lh, -hh, -wh, 1, 0, 0, -hh, -wh),
new CustomVertex.PositionNormalTextured(-lh, hh, wh, 1, 0, 0, hh, wh),
new CustomVertex.PositionNormalTextured(-lh, -hh, wh, 1, 0, 0, -hh, wh),
new CustomVertex.PositionNormalTextured(-lh, hh, -wh, 1, 0, 0, hh, -wh),
// Rechte Seite
new CustomVertex.PositionNormalTextured(lh, -hh, -wh, -1, 0, 0, -hh, -wh),
new CustomVertex.PositionNormalTextured(lh, hh, wh, -1, 0, 0, hh, wh),
new CustomVertex.PositionNormalTextured(lh, -hh, wh, -1, 0, 0, -hh, wh),
new CustomVertex.PositionNormalTextured(lh, hh, -wh, -1, 0, 0, hh, -wh)
};
for(int i = 0; i < verts.Length; i++)
{
verts[i].Tu *= 0.25f;
verts[i].Tv *= 0.25f;
}
short[] inds = new short[]
{
0, 1, 2, 3, 1, 0,
4, 5, 6, 7, 5, 4,
8, 9, 10, 11, 9, 8,
12, 13, 14, 15, 13, 12,
16, 17, 18, 19, 17, 16,
20, 22, 21, 23, 20, 21
};
//...
}
Jetzt wollte ich noch eins draufsetzen, und mir eine Box erstellen, bei der nur die Kanten zu sehen sind. Leider stehe ich da derzeit komplett auf dem Schlauch und habe keine Idee, wie ich diese Aufgabe lösen könnte.
Hat einer von euch schon eine Box erstellt, bei der NUR die Kanten zu sehen sind?
Kann mir einen bei diesem Problem weiterhelfen?
Hat einer vielleicht Beispielcode für mich, oder zumindest den entscheidenden Wink in die richitge Richtung?
Besten Dank schon einmal für eure Hilfe und Unterstützung 😃
~ rock on ~
Poste doch bitte mal deine Rendermethode dann gehts weiter... 😉
Morgen 😃
Also so spannend ist die Render-Methode jetzt nicht. Mir geht es ja in erster Linie um die Box, dass dort nur die Kanten zu sehen sind. Die Idee die mir gestern im Schlaf noch gekommen ist wäre, dass ich auf jeder Seite der Box nur (dort wo die Kanten sind), jeweils ein sehr schmales Rechteck mache.
Was haltet ihr davon?
Hättet ihr noch andere Ideen?
So. Jetzt aber noch die Render-Methode 😉
public void Render()
{
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1, 0);
device.BeginScene();
device.RenderState.Lighting = true;
device.RenderState.SpecularEnable = true;
device.RenderState.LocalViewer = true;
device.Transform.World = Matrix.Translation(0, 0, 3);
meshBox.Draw();
device.EndScene();
device.Present();
}
~ rock on ~
Vielleicht hilft dir das weiter: XNA Linie in Elemente zeichnen
Weeks of programming can save you hours of planning
Hallo MrSparkle.
Zuerst einmal danke für den Hinweis. Der geht schon in die richtige Richtung.
Jedoch möchte ich, dass ausschließlich die Linien zu sehen sind. Man soll sozusagen durch den Würfel/Box hindurchsehen können und nur anhand dieser Extralinien ist zu erkennen, welche Dimensionen die Box besitzt...
~ rock on ~
dann mußt du einfach den Indexbuffer als LineStrip rendern, und den Rest nicht...
Weeks of programming can save you hours of planning
sorry für die dumme nachfrage, aber wo kann ich das machen?
bin noch absoluter beginner was direct3d betrifft 😦
~ rock on ~
Weeks of programming can save you hours of planning