سؤال

وأنا جديدة نسبيا إلى برنامج OpenGL وأواجه بعض القضايا وأنا عندما جعل صورة كما الملمس لQUAD الذي هو ونفس حجم الصورة. هنا هو رمز بلادي. وسأكون ممتنا للغاية إذا كان شخص ما يساعدني على حل هذه المشكلة. تظهر صورة طريقة أصغر ومسحوق. (راجع للشغل، أبعاد الصورة هي 500x375).

glGenTextures( 1, &S_GLator_InputFrameTextureIDSu );
        glBindTexture(GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

        glTexImage2D( GL_TEXTURE_2D, 0, 4, S_GLator_EffectCommonData.mRenderBufferWidthSu, S_GLator_EffectCommonData.mRenderBufferHeightSu, 0, GL_RGBA, GL_UNSIGNED_BYTE, dataP);
glBindTexture(GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu);
        glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, S_GLator_EffectCommonData.mRenderBufferWidthSu, S_GLator_EffectCommonData.mRenderBufferHeightSu, GL_RGBA, GL_UNSIGNED_BYTE, bufferP);
//set the matrix modes
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();
        //gluPerspective( 45.0, (GLdouble)widthL / heightL, 0.1, 100.0 );
        glOrtho (0, 1, 0, 1, -1, 1);
        // Set up the frame-buffer object just like a window.
        glViewport( 0, 0, widthL, heightL );
        glDisable(GL_DEPTH_TEST);
        glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );


        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity();


        glBindTexture( GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu );


        //Render the geometry to the frame-buffer object


        glBegin(GL_QUADS); //input frame
            glColor4f(1.f,1.f,1.f,1.f);
            glTexCoord2f(0.0f,0.0f);    
            glVertex3f(0.f ,0.f ,0.0f);
            glTexCoord2f(1.0f,0.0f);    
            glVertex3f(1.f ,0.f,0.0f);
            glTexCoord2f(1.0f,1.f); 
            glVertex3f(1.f ,1.f,0.0f);
            glTexCoord2f(0.0f,1.f); 
            glVertex3f(0.f ,1.f,0.0f);
        glEnd();
هل كانت مفيدة؟

المحلول

أولا، يجب أن تكون أبعاد الصورة صلاحيات اثنين، وليس فقط التعسفية 500x375. ثانيا، يجب أن يكون internalformat (الثالثة) حجة لglTexImage2D ثابت رمزي، واصفا تخطيط التنسيق الداخلي، وليس "4" فقط، كما أنها انتقدت منذ برنامج OpenGL 1.2. ثالثا، dataP وbufferP تخطيط التخزين الخاصة بك يجب أن تتوافق مع GL_UNPACK_ALIGNMENT الحالية. رابعا، رباعية متساوي الأضلاع الخاص بك، والتي كنت تحاول وضع الملمس على، هي في الأساس مربع، وبالتالي ستظهر الملمس الخاص بك غير مربع ممرود أو امتدت مع مثل هذه الإحداثيات الملمس.

نصائح أخرى

وأعتقد أنني أراك اصدار هنا. glViewport يحدد حجم العرض، وليس حجم النافذة. لذلك عند إنشاء الإطار الخاص بك (مع تخمة، SDL، أو WGL، أو أيا كان)، لديك لتحديد حجم. للحصول على 1: 1 رسم الخرائط من glViewport في هذا الإطار، تلك الحاجة اثنين لمباراة

.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top