Sign in to follow this  

gltexgen error

This topic is 3376 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

hi all iam trying to do a simple gl texgen of a picture on a teapot but the program takes only one texel value, as it would do, if i dint do gltexgen here is my code ---------------------------------- in test.cpp program GLuint setupSOILTexture(char *texName, GLuint texture_unit) { static int abc =0; glActiveTexture(texture_unit); GLuint x = SOIL_load_OGL_texture ( texName, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_NTSC_SAFE_RGB |SOIL_FLAG_INVERT_Y | SOIL_FLAG_TEXTURE_REPEATS ); if( 0 == x ) { printf( "SOIL loading error: '%s'\n", SOIL_last_result() ); } glBindTexture( GL_TEXTURE_2D, x); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); float s_plane[] = { 1.0, 0.0, 0.0, 0.0}; float t_plane[] = { 0.0, 1.0, 0.0,0.0}; // we use the z plane here, but map it to y, since we are extruding on Z, not Y glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGenfv(GL_S, GL_OBJECT_PLANE, s_plane); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGenfv(GL_T, GL_OBJECT_PLANE, t_plane); if(glIsEnabled(GL_TEXTURE_GEN_S) && glIsEnabled(GL_TEXTURE_GEN_T)){printf("gen s,t enabled");} else{printf("gen s,t not enabled");} return x; } ------------------ void render(){ glUseProgram(p); loc1 = glGetUniformLocation(p, "LightPosition"); glUniform3f(loc1, 1.5, 1.5, 0.0); loc2 = glGetUniformLocation(p, "texture1"); //skull glUniform1i(loc2, 0); glPushMatrix(); glScalef(3.31,3.31,3.31); glRotatef(mouseWindowX*360,0,1,0); glRotatef(mouseWindowY*60,0,0,1); glutSolidTeaPot(2); } ------------------ int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(0,0); glutInitWindowSize(1300,1300); glutCreateWindow("GLSL demo"); glutDisplayFunc(renderScene); glutIdleFunc(renderScene); glutReshapeFunc(changeSize); glEnable(GL_DEPTH_TEST); glClearColor(0.0, 0.0, 0.0, 1.0); glewInit(); if (GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader) printf("Ready for GLSL\n"); else { printf("No GLSL support\n"); exit(1); } if(glActiveTexture==NULL) { printf("glActiveTexture not supported\n"); exit(1); } else { printf("yes"); } setupSOILTexture("./images/skull.jpg", GL_TEXTURE0); p=setShaders("./gen.vert", "./gen.frag"); glutMainLoop(); return 0; } ------------------ vertex shader: uniform vec3 LightPosition; void main (void) { gl_Position = ftransform(); gl_TexCoord[0] = gl_MultiTexCoord0; } --------------------- fragment shader // Fragment shader for environment mapping with an // equirectangular 2D texture // Authors: John Kessenich, Randi Rost // Copyright (c) 2002-2004 3Dlabs Inc. Ltd. // See 3Dlabs-License.txt for license information uniform sampler2D texture1; void main (void) { vec3 envColor = vec3 (texture2D(texture1, gl_TexCoord[0].st)); // Add lighting to base colour and mix envcolor*=0.7; //for lighting gl_FragColor = vec4(envColor, 1.0); } -------------- the resulting image is the texture coordinate is a constant one for all vertices and it is giving me a single color from the texture please tell me where i went wrong with the texgen thanks

Share this post


Link to post
Share on other sites
Are you using shaders? If you are, then fixed function mode things like texgen won`t work. You have to code it yourself in the vertex shader, or if you prefer, the fragment shader.

Share this post


Link to post
Share on other sites
oh great. now i have to figure out how to do object_plane by myself
i want the texture to stick to the object, and not move with the camera, or rotation.

do u know, how to figure out the texel value in the vertex shader?
using the vertex position as the reference?

Share this post


Link to post
Share on other sites

gl_TexCoord[0].s = dot(gl_Vertex, gl_ObjectPlaneS[0]);
gl_TexCoord[0].t = dot(gl_Vertex, gl_ObjectPlaneT[0]);
gl_TexCoord[0].p = dot(gl_Vertex, gl_ObjectPlaneR[0]);
gl_TexCoord[0].q = dot(gl_Vertex, gl_ObjectPlaneQ[0]);



Try that

Share this post


Link to post
Share on other sites

This topic is 3376 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this