Lines Matching defs:model
16 #define T(x) model->triangles[(x)]
19 /* glmDraw: Renders the model to the current OpenGL context using the
22 * model - initialized GLMmodel structure
34 glmDraw(GLMmodel* model, GLuint mode)
39 assert(model);
40 assert(model->vertices);
43 if (mode & GLM_FLAT && !model->facetnorms) {
48 if (mode & GLM_SMOOTH && !model->normals) {
53 if (mode & GLM_TEXTURE && !model->texcoords) {
63 if (mode & GLM_COLOR && !model->materials) {
68 if (mode & GLM_MATERIAL && !model->materials) {
84 glTranslatef(model->position[0], model->position[1], model->position[2]);
87 group = model->groups;
91 model->materials[group->material].ambient);
93 model->materials[group->material].diffuse);
95 model->materials[group->material].specular);
97 model->materials[group->material].shininess);
101 glColor3fv(model->materials[group->material].diffuse);
106 glNormal3fv(&model->facetnorms[3 * T(group->triangles[i]).findex]);
109 glNormal3fv(&model->normals[3 * T(group->triangles[i]).nindices[0]]);
111 glTexCoord2fv(&model->texcoords[2*T(group->triangles[i]).tindices[0]]);
112 glVertex3fv(&model->vertices[3 * T(group->triangles[i]).vindices[0]]);
115 model->vertices[3 * T(group->triangles[i]).vindices[0] + X],
116 model->vertices[3 * T(group->triangles[i]).vindices[0] + Y],
117 model->vertices[3 * T(group->triangles[i]).vindices[0] + Z]);
121 glNormal3fv(&model->normals[3 * T(group->triangles[i]).nindices[1]]);
123 glTexCoord2fv(&model->texcoords[2*T(group->triangles[i]).tindices[1]]);
124 glVertex3fv(&model->vertices[3 * T(group->triangles[i]).vindices[1]]);
127 model->vertices[3 * T(group->triangles[i]).vindices[1] + X],
128 model->vertices[3 * T(group->triangles[i]).vindices[1] + Y],
129 model->vertices[3 * T(group->triangles[i]).vindices[1] + Z]);
133 glNormal3fv(&model->normals[3 * T(group->triangles[i]).nindices[2]]);
135 glTexCoord2fv(&model->texcoords[2*T(group->triangles[i]).tindices[2]]);
136 glVertex3fv(&model->vertices[3 * T(group->triangles[i]).vindices[2]]);
139 model->vertices[3 * T(group->triangles[i]).vindices[2] + X],
140 model->vertices[3 * T(group->triangles[i]).vindices[2] + Y],
141 model->vertices[3 * T(group->triangles[i]).vindices[2] + Z]);
155 glmMakeVBOs(GLMmodel *model)
167 model->posOffset = 0;
169 if (model->numnormals > 0) {
170 assert(model->numnormals == model->numvertices);
171 model->normOffset = vertexFloats * sizeof(GLfloat);
175 if (model->numtexcoords > 0) {
176 assert(model->numtexcoords == model->numvertices);
177 model->texOffset = vertexFloats * sizeof(GLfloat);
181 model->vertexSize = vertexFloats;
183 bytes = (model->numvertices + 1) * vertexFloats * sizeof(float);
186 for (i = 0; i < model->numvertices; i++) {
189 buffer[i * vertexFloats + j++] = model->vertices[i * 3 + 0];
190 buffer[i * vertexFloats + j++] = model->vertices[i * 3 + 1];
191 buffer[i * vertexFloats + j++] = model->vertices[i * 3 + 2];
192 if (model->numnormals > 0) {
193 buffer[i * vertexFloats + j++] = model->normals[i * 3 + 0];
194 buffer[i * vertexFloats + j++] = model->normals[i * 3 + 1];
195 buffer[i * vertexFloats + j++] = model->normals[i * 3 + 2];
197 if (model->numtexcoords > 0) {
198 buffer[i * vertexFloats + j++] = model->texcoords[i * 2 + 0];
199 buffer[i * vertexFloats + j++] = model->texcoords[i * 2 + 1];
203 glGenBuffersARB(1, &model->vbo);
204 glBindBufferARB(GL_ARRAY_BUFFER_ARB, model->vbo);
214 for (group = model->groups; group; group = group->next) {
220 glGenBuffersARB(1, &model->index_vbo);
221 glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, model->index_vbo);
228 for (group = model->groups; group; group = group->next) {
278 glmLoadTextures(GLMmodel *model)
282 for (i = 0; i < model->nummaterials; i++) {
283 GLMmaterial *mat = &model->materials[i];
290 glmDrawVBO(GLMmodel *model)
295 assert(model->vbo);
297 glBindBufferARB(GL_ARRAY_BUFFER_ARB, model->vbo);
299 glVertexPointer(3, GL_FLOAT, model->vertexSize * sizeof(float),
300 (const void *) (size_t) model->posOffset);
303 if (model->numnormals > 0) {
304 glNormalPointer(GL_FLOAT, model->vertexSize * sizeof(float),
305 (const void *) (size_t) model->normOffset);
309 if (model->numtexcoords > 0) {
310 glTexCoordPointer(2, GL_FLOAT, model->vertexSize * sizeof(float),
311 (const void *) (size_t) model->texOffset);
315 glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, model->index_vbo);
318 glTranslatef(model->position[0], model->position[1], model->position[2]);
319 glScalef(model->scale, model->scale, model->scale);
321 for (group = model->groups; group; group = group->next) {
325 glmShaderMaterial(&model->materials[group->material]);
348 /* glmList: Generates and returns a display list for the model using
351 * model - initialized GLMmodel structure
363 glmList(GLMmodel* model, GLuint mode)
369 glmDraw(model, mode);
494 glmSpecularTexture(GLMmodel *model, uint cubeTex)
498 for (i = 0; i < model->nummaterials; i++) {
499 model->materials[i].texture_ks = cubeTex;