查看: 1179|回复: 6

贴图

[复制链接]

该用户从未签到

发表于 2013-3-30 19:40:18 | 显示全部楼层 |阅读模式
本帖最后由 osgzhang 于 2013-3-30 19:42 编辑

为什么设置过了纹理坐标,贴图贴出
来是黑色的!平面是用nurbs画的平面,用opengl1.0库 没问题,能贴上,但是2.0的库就不行了。是怎么回事?
求助!
tietu.jpg

该用户从未签到

发表于 2013-4-1 10:09:37 | 显示全部楼层
您给出的信息无法提供任何线索

该用户从未签到

 楼主| 发表于 2013-4-1 21:35:46 | 显示全部楼层
void CPlane::drawImplementation(osg::RenderInfo& renderInfo) const
{
        GLfloat knotsU[4]= { 0, 0, 1, 1 };
        GLfloat knotsV[4]= { 0, 0, 1, 1 };

   GLfloat textureCntrlPnt[2][2][2] = {
    {{0.0f,0.0f},{0.0f,1.0f}},
    {{1.0f,0.0f},{1.0f,1.0f}}
     };

        GLfloat BigPlanectrlp[2][2][3];
        for(int i =0 ;i<2;i++)
                for(int j =0;j<2 ;j++)
                        for(int k =0; k<3;k++)
                        {
                                BigPlanectrlp[i][j][k]=bigplane_ctrlp[i][j][k];
                        }
                        glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT);
                        glEnable(GL_AUTO_NORMAL);
                        glEnable(GL_NORMALIZE);
                        GLUnurbsObj *theNurb = gluNewNurbsRenderer();

                        //////////////////回调函数用到的设置/////////////////////////////
                        gluNurbsProperty(theNurb,GLU_SAMPLING_METHOD,GLU_DOMAIN_DISTANCE);
                        gluNurbsProperty(theNurb,GLU_NURBS_MODE,GLU_NURBS_TESSELLATOR);
                        gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE,1000.0);
                        gluNurbsProperty(theNurb, GLU_U_STEP, 5);
                        gluNurbsProperty(theNurb, GLU_V_STEP, 5);
                        gluNurbsProperty(theNurb,GLU_DISPLAY_MODE,GLU_FILL);

                        gluNurbsCallback(theNurb, GLU_NURBS_BEGIN, (void (__stdcall *)())beginCallback_plane);
                        gluNurbsCallback(theNurb,GLU_NURBS_VERTEX,(void (__stdcall *)())vertexCallback_plane);
                        gluNurbsCallback(theNurb,GLU_NURBS_NORMAL,(void (__stdcall *)())normalCallback_plane);
                        gluNurbsCallback(theNurb,GLU_NURBS_END,(void (__stdcall *)())endCallback_plane);
                        ///////////////////////////////////////////////


                        gluNurbsProperty(theNurb,GLU_SAMPLING_TOLERANCE,100.0);
                        gluNurbsProperty(theNurb,GLU_DISPLAY_MODE,GLU_FILL);
                        gluBeginSurface(theNurb);
                        gluNurbsSurface(theNurb,  //// 用大平面控制点bigplane_ctrlp画大平面
                                4, knotsU, 4,knotsV,
                                2*3, 3, &BigPlanectrlp[0][0][0],
                                2, 2,GL_MAP2_VERTEX_3);
                                gluNurbsSurface(theNurb,4,knotsU,4,knotsV,4,2,
           (float *)textureCntrlPnt,
                 2,2,
             GL_MAP2_TEXTURE_COORD_2);

            TrimFunction(theNurb);
           gluEndSurface(theNurb);       
          glPopAttrib();
}      重载的这个函数,有纹理坐标,模仿的是例子里的茶壶,不过茶壶那个是用 beizier曲面画的,这个是nurbs。然后用 osg里边的添加贴图状态的函数。
    plane->getOrCreateStateSet()->setTextureAttributeAndModes(0,new osg::Texture2D(osgDB::readImageFile(photoname)));
     然后添加到根节点下。
    刚开始用的  openGL1.0 的库, 可以贴上纹理,换成2.0后主要是那个openGL32.dll 后就没有纹理了 求解释!因为需要和面求交,要用到  openGL2.0的库。然后 就没纹理了怎么办啊?
   

该用户从未签到

发表于 2013-4-2 13:13:00 | 显示全部楼层
您是如何定义OpenGL1.0和2.0的,OpenGL的版本更新是随着显卡驱动而发生的,我不认为您可以随便替换到旧的版本而不发生问题

该用户从未签到

 楼主| 发表于 2013-4-2 21:12:07 | 显示全部楼层
我说的openGL 1.0版本应该是 1.1的版本,然后用2.0版本的去分别替换 1.1里的.h、.lib、.dll  。备注:已经把system32里的dll 的权限已经修改

gl.h

88.63 KB, 下载次数: 0, 下载积分: 威望 1

该用户从未签到

 楼主| 发表于 2013-4-2 21:29:05 | 显示全部楼层
不好意思啊,怎么添加附件就加进去了个gl.h 。 未命名.jpg OpenGL2.0库.zip (1.95 MB, 下载次数: 0)

该用户从未签到

发表于 2013-4-3 08:01:54 | 显示全部楼层
??感觉您理解的好像有错误,您还是好好看看OpenGL的版本相关的知识
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表