Birdview Material

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Birdview Material
Hi,

wie verwendet den Material Type Birdview richtig? Ich moechte die Textur der Birdview Cam an einen Shader uebergeben.

Momentan schaut mein Aufruf im Material so aus:

<?xml version="1.0"?>
<material name="birdview" class="Opaque" light="true">
  <texture name="bird" class="birdview" target="GL_TEXTURE_2D" env="GL_MODULATE" stage="GL_TEXTURE0" terrain="true" sky="false" staticobj="false" dynamicobj="true" mipmap="true">
	  <param name="GL_TEXTURE_MIN_FILTER" value="GL_LINEAR_MIPMAP_LINEAR"/>
	  <param name="GL_TEXTURE_MAG_FILTER" value="GL_LINEAR"/>
    <param name="GL_TEXTURE_WRAP_S" value="GL_CLAMP_TO_EDGE"/>
    <param name="GL_TEXTURE_WRAP_T" value="GL_CLAMP_TO_EDGE"/>
  </texture>
  <shader vsource="terrain_far.vert" fsource="terrain_far.frag">
	  <uniform name="map" class="tex" value="0" />
	  <uniform name="size" source="terrainsize" />
  </shader>
  <color ambient="" diffuse="1 1 1 1" shininess="" />
</material>

Unser low-detail-material sieht so aus:

<?xml version="1.0"?>
<material name="Terrain_LowDetail" class="Opaque" light="false">
	<texture name="TerrainBirdView" class="birdview" env="GL_REPLACE" stage="GL_TEXTURE0" res="2048 2048" terrain="true" sky="false" staticobj="false" dynamicobj="false">
		<param name="GL_TEXTURE_MIN_FILTER" value="GL_LINEAR"/>
		<param name="GL_TEXTURE_MAG_FILTER" value="GL_LINEAR"/>
		<param name="GL_TEXTURE_WRAP_S" value="GL_CLAMP"/>
		<param name="GL_TEXTURE_WRAP_T" value="GL_CLAMP"/>
	</texture>
	<shader vsource="terrain_texture_lowdetail.vert" fsource="terrain_texture_lowdetail.frag">
		<uniform name="tBirdview" class="tex" value="0" />
		<uniform name="size" source="chunkedsize" />
	</shader>
	<color ambient="0.2 0.2 0.2 0.2" diffuse="1 1 1 1" shininess="" />
</material>

… und dann natürlich im MaterialManager weiterverarbeiten

			} else if (category == "birdview") {
				BaseMaterial::SMatTextureBirdViewDef* matTexDef = new BaseMaterial::SMatTextureBirdViewDef();
				if (matTexDef != NULL) {
					TextureBirdView::LoadTexBirdViewDef(*matTexDef, c);
					matDef.textures.push_back(matTexDef);
					texDone = true;
				} else {
					Err::wng << "WW Material definition load for " << filename << std::endl;
					Err::wng << "   Could not get memory for SMatTextureProjDef - texture def not added." << std::endl << std::endl;
				}

Gruss, Jochen


Danke fuer die schnelle Antwort.

Ich sehe leider noch kein Material, wie kann ich 2 Materials an das Terrain binden? Momentan steht im warning log das das Material kein Parent hat.


Ahh, es gibt noch ne material option fuers terrain ;). Leider sehen wir immer noch keine Textur :frowning:


Ok, ich schreib was ihr machen müsst…

Scenefile:

<terrain file="terrains/512x512.raw" map="images/map.rgba" width="512" height="512" divider="5000" material="Terrain_Map_512" material_low_detail="Terrain_LowDetail">

Terrain_LowDetail.xml (Material)

<?xml version="1.0"?>
<material name="Terrain_LowDetail" class="Opaque" light="false">
    <texture name="TerrainBirdView" class="birdview" env="GL_REPLACE" stage="GL_TEXTURE0" res="2048 2048" terrain="true" sky="false" staticobj="false" dynamicobj="false">
        <param name="GL_TEXTURE_MIN_FILTER" value="GL_LINEAR"/>
        <param name="GL_TEXTURE_MAG_FILTER" value="GL_LINEAR"/>
        <param name="GL_TEXTURE_WRAP_S" value="GL_CLAMP"/>
        <param name="GL_TEXTURE_WRAP_T" value="GL_CLAMP"/>
    </texture>
    <shader vsource="terrain_texture_lowdetail.vert" fsource="terrain_texture_lowdetail.frag">
        <uniform name="tBirdview" class="tex" value="0" />
        <uniform name="size" source="chunkedsize" />
    </shader>
    <color ambient="0.2 0.2 0.2 0.2" diffuse="1 1 1 1" shininess="" />
</material>

Sceneloader
XML::ParseValue(c, "material", sceneDef.terrain.material); XML::ParseValue(c, "material_low_detail", sceneDef.terrain.material_ld);

ChunkTerrain Constructor

m_pMaterial_LowDetail = Game::managers.mm.GetMaterial( def_.material_ld );

MaterialManager.cpp::LoadMaterialDef

            } else if (category == "birdview") {
                BaseMaterial::SMatTextureBirdViewDef* matTexDef = new BaseMaterial::SMatTextureBirdViewDef();
                if (matTexDef != NULL) {
                    TextureBirdView::LoadTexBirdViewDef(*matTexDef, c);
                    matDef.textures.push_back(matTexDef);
                    texDone = true;
                } else {
                    Err::wng << "WW Material definition load for " << filename << std::endl;
                    Err::wng << "   Could not get memory for SMatTextureProjDef - texture def not added." << std::endl << std::endl;
                }

Dann noch beim Terrain low detail rendern das richtige Material setzten und es sollte klappen.

Gruss, Jochen


Nochmals vielen Dank. Habe alles genau so. Jedoch sieht man immer noch nichts :confused:

Mfg Henry
Team1


Tja, wenn du jetzt ein VS 2003 und kein 2005er Projekt haettest … Ich schau es mir am Fr an. An der Informatik find ich sicherlich einen Rechner mit VS 2005.

Gruss
Frank


Brauchst du nicht,

  • öffne offroad.vcproj
  • replace Version Number “8.00” by “7,10” ← Wichtig, mal Punkt, mal Komma.
  • speichern

Gruss, Jochen


Eine Firma die zum Verkauf ihrer Produkte neue Versionsnummern und einfuehrt … aber lassen wir das. Es kompiliert gerade. Ich schaus mir dann mal an.

BTW, sollten wir vielleicht mal SDL_mixer.h und Co ins Contrib uebernehmen?

Gruss
Frank


Ja waer gut die mit ins Contrib zu uebernehmen :wink: