Results 1 to 6 of 6

Thread: .asc (3ds max) Texture coordinates

  1. #1
    Member Contributor
    Join Date
    Oct 2002
    Posts
    55

    .asc (3ds max) Texture coordinates

    Hello,

    I have a problem with the .asc file from 3ds max. I have drawn a 3d object in 3ds max, and had export it to a .asc file. I have written an converter which displays the object in opengl. Now I have a problem with my Texture coordinates, i have no idea how to use the exported ones.
    And i have also no idea how to calculate texture coordinates for the Object.

    thank you for reply

    helda

    p.s. i don't want to use glTexGen

  2. #2
    Senior Member Regular Contributor
    Join Date
    Mar 2002
    Location
    Melbourne, Australia
    Posts
    224

    Re: .asc (3ds max) Texture coordinates

    Hi there!

    First hit "MESH_NUMTVERTEX" it says how many texture coordinates you have.

    Then followed by "MESH_TVERT" keywords (for each texture coordinate) you have 3 values:
    id u_coordinate v_coordinate.

    After reading them you have "MESH_TFACE"'s (no.faces times) - each followed by 4 values: id and 3 ids of texture coordinates you've just read in.

    Hope this helps.

  3. #3
    Member Contributor
    Join Date
    Oct 2002
    Posts
    55

    Re: .asc (3ds max) Texture coordinates

    are these parameters in the ase format? can i get this information in the .asc format?

    helda

  4. #4
    Senior Member Regular Contributor
    Join Date
    Mar 2002
    Location
    Melbourne, Australia
    Posts
    224

    Re: .asc (3ds max) Texture coordinates

    I have no experience with .asc at all.
    As for .ASEs - these terms should be in exported file. Make sure you enable texture coordinates export in 3dsmax exporter.

  5. #5
    Member Contributor
    Join Date
    Oct 2002
    Posts
    55

    Re: .asc (3ds max) Texture coordinates

    do you have any specification of the .ase format, because i can test it with that. (or any code example)

  6. #6
    Senior Member Regular Contributor
    Join Date
    Mar 2002
    Location
    Melbourne, Australia
    Posts
    224

    Re: .asc (3ds max) Texture coordinates

    Here's cut'n'pasted ASE loader, should help, though its has some engine specific structs/macros.
    Code :
     
    bool Builder_c::ReadASE()
    {
    	int i, j;
    	int NumFaces, NumVerts, NumTVerts;
    	int NumObjects;
    	int Flags, ShaderID;
    	Vec3_t *TmpVerts;
    	Vec2_t *TmpTVerts;
    	Parser_c Parser;
     
    	if (!Parser.Open("Base/Data/Maps_in/ASE/%s", FileName))
    	{
    		LOL_WARN("Couldn't open map file \"%s\" in \"%s\"", Parser.GetFileName());
    		return false;
    	}
     
    	// Extract name without extension
    	Name = LOL_ALLOC char[strlen(FileName) - 3];
    	memcpy(Name, FileName, sizeof(char) * (strlen(FileName) - 4));
    	Name[strlen(FileName) - 4] = '\0';
     
    	LOL_PRINT("$>Building map from \"%s\" (%.2f kB)...", FileName, (float) Parser.FileSize() / 1024);
    	LOL_REFRESH;
     
    	// Materials
    	//----------
     
    	Parser.Next("*MATERIAL_COUNT");
    	LOL_FOR(i = Parser.NextInt(), i > 0, i--)
    	{
    		Parser.Next("*BITMAP");
    		ShaderRefs.Alloc();
    		strcpy(ShaderRefs.Get().Name, Parser.Next());
    	}
     
    	// Objects
    	//--------
     
    	NumObjects = 0;
    	NumVerts = 1;
    	NumTVerts = 1;
    	TmpVerts = LOL_ALLOC Vec3_t[NumVerts];
    	TmpTVerts = LOL_ALLOC Vec2_t[NumTVerts];
     
    	while (!Parser.EOFile())
    	{
    		LOL_REFRESH;
    		if (!Parser.Next2("*GEOMOBJECT", "*LIGHTOBJECT"))
    		{
    			break;
    		}
     
    		// Light object
    		//-------------
     
    		if (!stricmp("*LIGHTOBJECT", Parser.Curr()))
    		{
    			Lights.Alloc();
     
    			// Default Flags
    			Lights.Get().Flags = LIGHT_SHADOWS | LIGHT_CORONA;
     
    			// Position
    			Parser.Next("*TM_POS");			
    			Lights.Get().Origin[0] = -Parser.NextFloat();
    			Lights.Get().Origin[2] = Parser.NextFloat();
    			Lights.Get().Origin[1] = Parser.NextFloat();
     
    			// Color (Alpha == 1 by default)
    			Parser.Next("*LIGHT_COLOR");
    			Lights.Get().Color[0] = Parser.NextFloat();
    			Lights.Get().Color[1] = Parser.NextFloat();
    			Lights.Get().Color[2] = Parser.NextFloat();
    			Lights.Get().Color[3] = 1.0f;
     
    			continue;
    		}
     
    		// Geometric object
    		//-----------------
     
    		NumObjects++;
     
    		// Face Flags
    		Parser.Next("*NODE_NAME");
    		if (stristr(Parser.Next(), "INVISIBLE"))
    		{
    			Flags = FACE_INVISIBLE | FACE_SEETHROUGH | FACE_NOTSOLID;
    		}
    		else if (stristr(Parser.Next(), "SEETHROUGH"))
    		{
    			Flags = FACE_SEETHROUGH | FACE_NOTSOLID;
    		}
    		else
    		{
    			Flags = 0;
    		}
     
    		Parser.Next("*MESH_NUMVERTEX");
    		i = Parser.NextInt();
     
    		Parser.Next("*MESH_NUMFACES");
    		NumFaces = Parser.NextInt();
     
    		// Verts
    		if (i > NumVerts)
    		{
    			NumVerts = i;
    			LOL_FREE1D( TmpVerts );
    			TmpVerts = LOL_ALLOC Vec3_t[NumVerts];
    		}
    		else
    		{
    			NumVerts = i;
    		}
     
    		LOL_FOR(i = 0, i < NumVerts, i++)
    		{
    			Parser.Next("*MESH_VERTEX");
    			Parser.Next();			// Skip int
     
    			// Exchange Y with Z, negate X
    			TmpVerts[i][0] = -Parser.NextFloat();
    			TmpVerts[i][2] = Parser.NextFloat();
    			TmpVerts[i][1] = Parser.NextFloat();
    		}
     
    		// Verts to Faces associations
    		LOL_FOR(i = 0, i < NumFaces, i++)
    		{
    			Parser.Next("*MESH_FACE");
    			Parser.Next();			// Skip "int:"
    			Parser.Next();			// Skip "A:"
     
    			Faces.Alloc();
    			Faces.Get().FirstVert = Verts.GetNum();
    			Faces.Get().NumVerts = 3;
     
    			// Inverse order to clockwise
    			j = Verts.Alloc();
    			Verts.Alloc();
    			Verts.Alloc();
     
    			Verts.Get(j).Pos = TmpVerts[ Parser.NextInt() ];
    			Parser.Next();			// Skip "B:"
    			Verts.Get(j + 2).Pos = TmpVerts[ Parser.NextInt() ];
    			Parser.Next();			// Skip "C:"
    			Verts.Get(j + 1).Pos = TmpVerts[ Parser.NextInt() ];
     
    			// Set to NULL for Kill() reasons
    			Faces.Get().EdgesID = NULL;
    		}
     
    		if (!(Flags & FACE_INVISIBLE))
    		{
    			// Texture coords
    			Parser.Next("*MESH_NUMTVERTEX");
    			i = Parser.NextInt();
     
    			if (i > NumTVerts)
    			{
    				NumTVerts = i;
    				LOL_FREE1D( TmpTVerts );
    				TmpTVerts = LOL_ALLOC Vec2_t[NumTVerts];
    			}
    			else
    			{
    				NumTVerts = i;
    			}
     
    			LOL_FOR(i = 0, i < NumTVerts, i++)
    			{
    				Parser.Next("*MESH_TVERT");
    				Parser.Next();		// Skip int
     
    				TmpTVerts[i][0] = Parser.NextFloat();
    				TmpTVerts[i][1] = Parser.NextFloat();
    			}
     
    			// Texture coords to faces associations
    			j = Faces.GetNum() - NumFaces;
     
    			LOL_FOR(i = 0, i < NumFaces, (i++, j++))
    			{
    				Parser.Next("*MESH_TFACE");
    				Parser.Next();		// Skip int
     
    				// Inverse order to clockwise
    				Verts.Get( Faces.Get(j).FirstVert ).Tex0 = TmpTVerts[ Parser.NextInt() ];
    				Verts.Get( Faces.Get(j).FirstVert + 2 ).Tex0 = TmpTVerts[ Parser.NextInt() ];
    				Verts.Get( Faces.Get(j).FirstVert + 1 ).Tex0 = TmpTVerts[ Parser.NextInt() ];
    			}
    		}
     
    		// Material reference
    		Parser.Next("*MATERIAL_REF");
    		ShaderID = Parser.NextInt();
     
    		// Assign common features for Faces
    		j = Faces.GetNum() - NumFaces;
     
    		LOL_FOR(i = 0, i < NumFaces, (i++, j++))
    		{
    			Faces.Get(j).Flags = Flags;
    			Faces.Get(j).ShaderID = ShaderID;
    		}
    	}
     
    	LOL_FREE1D( TmpVerts );
    	LOL_FREE1D( TmpTVerts );
     
    	LOL_PRINT("ASE File \"%s\" read [%d msec]", FileName, Clock->TestTime());
    	LOL_PRINT(" - Verts %d", Verts.GetNum());
    	LOL_PRINT(" - Faces %d", Faces.GetNum());
    	LOL_PRINT(" - Shaders %d", ShaderRefs.GetNum());
    	LOL_PRINT(" - Lights %d", Lights.GetNum());
    	LOL_PRINT(" - Geometric objects %d", NumObjects);
    	LOL_REFRESH;
     
    	return true;
    }

Similar Threads

  1. Texture Coordinates and Depth Buffer to obtain world coordinates
    By snkhan42 in forum OpenGL: Basic Coding
    Replies: 6
    Last Post: 04-27-2018, 11:52 AM
  2. Texture coordinates to screen pixel coordinates
    By lucafr in forum OpenGL: Basic Coding
    Replies: 0
    Last Post: 04-13-2011, 04:19 AM
  3. Texture Mapping & Texture Coordinates
    By senem in forum OpenGL: Basic Coding
    Replies: 20
    Last Post: 10-03-2007, 08:50 AM
  4. How to get texture coordinates from screen coordinates
    By geckosenator in forum OpenGL: Advanced Coding
    Replies: 4
    Last Post: 01-28-2006, 07:23 AM
  5. 3D Models with Texture Coordinates and Texture images
    By dimensionX in forum OpenGL: Advanced Coding
    Replies: 1
    Last Post: 04-15-2004, 11:59 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Proudly hosted by Digital Ocean