I Hope Your Read For This One (Reading To A Display List)
Ok, so I tried to mix lesson 10 and 12, reading from a file, into a display list. Im not getting any errors (which took a whiel to get to), and I was sure it would work, but when I run the program it says its encountered an error and wants me to send a report to microsoft. I know I'm beyond my abilities... but that was the whole point of this project :D
Heres the important stuff:
#include <windows.h> // Header File For Windows
#include <math.h>
#include <stdio.h>
#include <gl\gl.h> // Header File For The OpenGL32 Library
#include <gl\glu.h> // Header File For The GLu32 Library
#include <gl\glaux.h> // Header File For The Glaux Library
HDC hDC=NULL; // Private GDI Device Context
HGLRC hRC=NULL; // Permanent Rendering Context
HWND hWnd=NULL; // Holds Our Window Handle
HINSTANCE hInstance; // Holds The Instance Of The Application
bool keys[256]; // Array Used For The Keyboard Routine
bool active=TRUE; // Window Active Flag Set To TRUE By Default
bool fullscreen=TRUE; // Fullscreen Flag Set To Fullscreen Mode By Default
const float piover180 = 0.0174532925f;
float heading;
float xpos;
float zpos;
GLfloat yrot; // Y Rotation
GLfloat lookupdown = 0.0f;
GLfloat z=0.0f;
GLuint texture[2]; // My Pretty Pictures
GLuint astr; // Display List
GLuint sun; // Display List
typedef struct tagVERTEX // Where The Vertex Point Go
{
float x, y, z;
float u, v;
} VERTEX;
typedef struct tagQUAD // Collects Vertex Points
{
VERTEX vertex[4];
} QUAD;
typedef struct tagSECTOR // Loads Sector
{
int numquads;
QUAD* quad;
} SECTOR;
SECTOR sector1; // Creats An Instance Of SECTOR
GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f }; // Position Of Light Source
GLfloat LightPosition[]={ 0.0f, 0.0f, -50.0f, 1.0f }; // Coords Of Light Source
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration For WndProc
//------------------------------------
void readstr(FILE *f,char *string) // Reads From A File
{
do
{
fgets(string, 255, f);
} while ((string[0] == '/') || (string[0] == '\n'));// So We Dont Get The Spaces Or Comments
return;
}
//------------------------------------
void SetupWorld() // Read From Data File
{
float x, y, z, u, v; // Coord Vars
int numquads; // Number Of Quads In Total
FILE *filein;
char oneline[255];
filein = fopen("data/world.txt", "rt"); // Makes A Handle
readstr(filein, oneline);
sscanf(oneline, "NUMPOLLIES %d/n", &numquads); // Looks For How Many Quads In File
sector1.quad = new QUAD[numquads]; // New QUAD Object
sector1.numquads = numquads;
for (int loop = 0; loop< numquads; loop++) // Start Of Loop, Collects Coords
{
for (int vert = 0; vert < 4; vert++)
{
readstr(filein,oneline);
sscanf(oneline, "%f %f %f %f %f", &x, &y, &z, &u, &v);
sector1.quad[loop].vertex[vert].x = x;
sector1.quad[loop].vertex[vert].y = y;
sector1.quad[loop].vertex[vert].z = z;
sector1.quad[loop].vertex[vert].u = u;
sector1.quad[loop].vertex[vert].v = v;
}
}
fclose(filein);
return;
}
//------------------------------------
AUX_RGBImageRec *LoadBMP(char *Filename) // Checks Textures
{
FILE *File=NULL;
if (!Filename)
{
return NULL;
}
File=fopen(Filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoad(Filename);
}
return NULL;
}
//------------------------------------
int LoadGLTextures() // Gets Textures
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[2];
memset(TextureImage,0,sizeof(void *)*1);
if (TextureImage[0]=LoadBMP("Data/Astr.bmp")) // Texture One
{
Status=TRUE;
glGenTextures(2, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 2, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
}
if (TextureImage[0]=LoadBMP("Data/Sun.bmp")) // Texture Two
{
Status=TRUE;
glGenTextures(2, &texture[1]);
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 2, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
}
if (TextureImage[0]) // Free The Memory
{
if (TextureImage[0]->data)
{
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
return Status;
}
//------------------------------------
GLvoid BuildLists() // Make A BuildList
{
astr=glGenLists(2);
glNewList(astr,GL_COMPILE);
GLfloat x_m, y_m, z_m, u_m, v_m;
int numquads;
numquads = sector1.numquads;
for (int loop_m = 0; loop_m < numquads; loop_m++) // Read BuildList From File
{
glBegin(GL_QUADS);
glNormal3f ( 0.0f, 0.0f, 1.0f);
x_m = sector1.quad[loop_m].vertex[0].x;
y_m = sector1.quad[loop_m].vertex[0].y;
z_m = sector1.quad[loop_m].vertex[0].z;
u_m = sector1.quad[loop_m].vertex[0].u;
v_m = sector1.quad[loop_m].vertex[0].v;
glTexCoord2f(u_m, v_m);glVertex3f(x_m, y_m, z_m);
x_m = sector1.quad[loop_m].vertex[1].x;
y_m = sector1.quad[loop_m].vertex[1].y;
z_m = sector1.quad[loop_m].vertex[1].z;
u_m = sector1.quad[loop_m].vertex[1].u;
v_m = sector1.quad[loop_m].vertex[1].v;
glTexCoord2f(u_m, v_m);glVertex3f(x_m, y_m, z_m);
x_m = sector1.quad[loop_m].vertex[2].x;
y_m = sector1.quad[loop_m].vertex[2].y;
z_m = sector1.quad[loop_m].vertex[2].z;
u_m = sector1.quad[loop_m].vertex[2].u;
v_m = sector1.quad[loop_m].vertex[2].v;
glTexCoord2f(u_m, v_m);glVertex3f(x_m, y_m, z_m);
x_m = sector1.quad[loop_m].vertex[3].x;
y_m = sector1.quad[loop_m].vertex[3].y;
z_m = sector1.quad[loop_m].vertex[3].z;
u_m = sector1.quad[loop_m].vertex[3].u;
v_m = sector1.quad[loop_m].vertex[3].v;
glTexCoord2f(u_m, v_m);glVertex3f(x_m, y_m, z_m);
glEnd();
glEndList();
}
}
//------------------------------------
GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Resize And Initialize The GL Window
{
if (height==0) // Prevent A Divide By Zero By
{
height=1; // Making Height Equal One
}
glViewport(0,0,width,height); // Reset The Current Viewport
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
}
//------------------------------------
int InitGL(GLvoid) // All Setup For OpenGL Goes Here
{
if (!LoadGLTextures()) // Jump To Texture Loading Routine
{
return FALSE; // If Texture Didn't Load Return FALSE
}
BuildLists();
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);
glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);
glEnable(GL_LIGHT1);
return TRUE; // Initialization Went OK
}
//------------------------------------
int DrawGLScene(GLvoid) // Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glLoadIdentity(); // Reset The Current Modelview Matrix
glTranslatef(0.0f,0.0f,-10.0f);
glBindTexture(GL_TEXTURE_2D, texture[1]);
glCallList(astr);
return TRUE; // Keep Going
}
This is whats in the world.txt file:
"
NUMPOLLIES 1
// 1Sun!
-3.0 0.0 0.0 0.0 0.0
-3.0 3.0 0.0 0.0 0.0
3.0 3.0 0.0 0.0 0.0
3.0 0.0 0.0 0.0 0.0
"
Any help would be great, sorry I'm such a bad coder in advance.
-Matt
The Best Is Yet To Come
I amended lesson 10 with your code, although all i get is a grey screen there are no errors.
This is a double post. I recommend replying to the other version because the post has been edited to use [source] tags and is therefore clearer.
Enigma
Enigma
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement