Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

1

25.03.2008, 14:03

x-files mit Cinema4D mit mehreren subsets gehen in die hose

ich nutze cinema4d für das exportieren von x-files. dazu nutze ich das xport-plugin, welches wohl akzeptabel sein soll. Es funktioniert auch soweit ganz gut, solange man nur ein einziges objekt exportiert. sobald man mehrere hat (was nunmal notwendig is für mehrere texturen / mats), so schaffe ich es nicht, die datei richtig zu laden.
Ich nutze x zurzeit um ins eigene modelformat zu konvertieren, habe zum überprüfen der daten auch ein konsolenprogg geschrieben.

VB-Daten und IB-Daten sind korrekt, es hängt an der attribute-table. wenn man z. b. ein objekt aus einem zylinder und zwei kugeln an den enden exportiert (jedes der objeklte andere textur), so sieht man ohne optimize nix, es stehen für startVertex und CountVertices ziemlich große unwahrscheinliche werte in milliardenhöhe drin, teilweise sogar für VertexCount 0.
und so sieht das ganze mit optimize in der "besten" version aus:

Zitat von »"valuetest-programm"«


Anzahl Subsets: 3
VBStart: 0
VBCount : 28
IBStart: 0
IBCount: 78
textur: Woo08.bmp

VBStart: 28
VBCount : 285
IBStart: 26
IBCount: 1584
textur: Struk0Y.bmp

VBStart: 313
VBCount : 285
IBStart: 26
IBCount: 1584
textur: Struk0X.bmp


mit besten meine ich das hier:


(Link)


optimiert habe ich mit folgender einstellung:

C-/C++-Quelltext

1
2
3
4
5
6
lpPreMesh->Optimize(
        D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,
        reinterpret_cast<DWORD*>(lpAdjacency->GetBufferPointer()),
        NULL,
        NULL,NULL,
        &lpMesh);


gelden wird ganz normal mit D3DXLoadMeshFromX.

hat vielleicht einer eine idee, was ich falsch gemacht haben könnte? bzw. wie ich dem problem am besten asu dem weg gehe (x-format würde ich aber schon noch verwenden wollen).

Hier der Link zum Code!

2

25.03.2008, 14:26

Wie sehen die Modelle denn in anderen Viewern aus? Zum Beispiel dem vom DX-SDK?

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

25.03.2008, 14:32

gute idee!

dort sehen sie ganz normal aus. also ligt es doch am exportieren (von x-file format zu meinem)? ich poste mal die essentials. steht im ersten post glei^^.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

25.03.2008, 14:36

Sieht ja geil aus. Lass es einfach so und sag, dass es so sein soll. :D

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

25.03.2008, 14:42

Sieht nach falsch gezeichnet hast. Nutzt du Triangle_strips oder Triangle_list?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

25.03.2008, 14:49

triangle_list. ich habe strip mal probiert, sieht dann zwar nicht mehr ganz so wild aus, aber trotzdem noch vieles falsch. so wird gerendert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
BOOL mnModel::Render()
{
    // Variables

    LPDIRECT3DDEVICE9 lpDevice = mnDirect3D::GetSingleton()->GetDevice();

    // Setzt den Vertexbuffer

    if(FAILED(lpDevice->SetStreamSource(0, m_lpVertexBuffer->GetVB(), 0, 32)))return FALSE;

    // Setzt den Indexbuffer

    if(FAILED(lpDevice->SetIndices(m_lpIndexBuffer->GetIB()))) return FALSE;

    // Setzt Inputlayout

    if(FAILED(lpDevice->SetVertexDeclaration(m_lpInputLayout))) return FALSE;

    //Effekt vorbereiten

    SetPerRenderConstants();
    
    //Alle Subsets rendern

    for (DWORD i=0;i<m_iSubsetCount;i++)
    {
        //Per Subset Konstanten setzen

        SetPerSubsetConstants(i);
        
        //Technik setzen

        m_lpEffect->SetTechnique(m_lpSubset[i].sTechniqueName);
        m_lpEffect->BeginEffect();
        m_lpEffect->BeginPass(0);

        lpDevice->DrawIndexedPrimitive(
            D3DPT_TRIANGLELIST,
            m_lpSubset[i].iVertexStart,
            0,
            m_lpSubset[i].iVertexCount,
            m_lpSubset[i].iIndexStart,
            m_lpSubset[i].iIndexCount / 3);

        //Fertig rendern

        m_lpEffect->EndPass();
        m_lpEffect->EndEffect();
    }

    return TRUE;
}

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

25.03.2008, 14:58

Das Problem liegt wohl eher beim Füllen der Vertex- und Indexbuffer.
Außerdem würde ich, um das Problem einzugrenzen, mal "normal" (Fixed Function) rendern. ;)

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

25.03.2008, 15:03

joa, fragt sich blos ob das man mir liegt, oder das was optimize macht^^. ich werd da noch ein wenig rumprobieren, und auch das mit fixed function werde ich nochmal versuchen. ich habe noch was interessantes aus einem forum gefunden:

Zitat von »"microsoft-forum"«

had this problem a while ago too with simple boxes and spheres... M$ asked for my models to look at, but never got back to me (I assume because the models were fine and they couldn't figure out why D3DXLoadMeshFromX() would fail on them, and why only sometimes MeshViewer and the other new viewer could only display them sometimes...).

I have come to the conclusion that D3DXLoadMeshFromX is not a very advanced function, and while using 3D Max 7 has fixed a lot of my problems, I am currently rewriting my mesh code to use the examples shown in SkinnedMesh. I hope that works, and honestly, I hope M$ takes us seriously for a change. There *is* a problem with D3DXLoadMeshFromX. Period.

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

10

25.03.2008, 15:04

Zitat von »"drakon"«

Wie sieht denn dein FVF aus?


ich nutze kein FVF, sondern vertex declaration. sie sieht wie folgt aus:

C-/C++-Quelltext

1
2
3
4
5
D3DVERTEXELEMENT9 ele[] = {
    { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
    { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
    { 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
      D3DDECL_END(),};

Werbeanzeige