java – OpenGL渲染到纹理坐标
发布时间:2020-12-15 02:34:02 所属栏目:Java 来源:网络整理
导读:我希望能够渲染到纹理(对于着色器,字体),但我有一个问题是正确定位四边形(帧缓冲本身做它应该做的事情).生成的(复制的)纹理在大多数情况下显示左上角,其余的被裁剪.这对于矩形纹理来说更糟糕,对方形纹理几乎没有影响(所以我好几天都没有认识到这种行为) 示例
我希望能够渲染到纹理(对于着色器,字体),但我有一个问题是正确定位四边形(帧缓冲本身做它应该做的事情).生成的(复制的)纹理在大多数情况下显示左上角,其余的被裁剪.这对于矩形纹理来说更糟糕,对方形纹理几乎没有影响(所以我好几天都没有认识到这种行为)
示例代码: public Texture copy(final Texture tex) { final int tempTex = glGenTextures(); Draw.bindTexture(tempTex); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D,GL_RGBA,tex.getImageWidth(),tex.getImageHeight(),GL_RGB,GL_UNSIGNED_BYTE,(ByteBuffer)null); // Adjust projection matrix glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glViewport(0,tex.getImageHeight()); // Change blendmode to ignore the transparent background Draw.blendingMode(GL_ONE,GL_ONE_MINUS_SRC_ALPHA); // Prepare fbo,add the texture as backend and clear it final int fbo = glGenFramebuffers(); glBindFramebuffer(GL_FRAMEBUFFER,fbo); glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,tempTex,0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Finally draw Draw.bindTexture(tex.getId()); glBegin(GL_QUADS); { glTexCoord2f(0,0); glVertex2f(-1,-1); glTexCoord2f(1,0); glVertex2f(1,1); glVertex2f(1,1); glTexCoord2f(0,1); glVertex2f(-1,1); } glEnd(); // Unbind framebuffer glBindFramebuffer(GL_FRAMEBUFFER,0); // Reset projection matrix glViewport(0,1920,1080); // TODO Don't hardcode glPopMatrix(); return new Texture(tempTex,tex.getImageHeight()); } 示例图片: 鞋面是复制版本下方渲染的原始图像 我究竟做错了什么? 更新:现在看起来纹理得到了下采样 解决方法
您不应该将实际纹理宽度和高度传递到texcoords.纹理坐标范围从0(底部和左侧)到1(顶部和右侧).您不会将实际纹理尺寸硬编码到纹理坐标中.
尝试用“1”替换texcoord函数中的getWidth / getHeight (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 如何设置自定义按钮状态背景颜色?
- java – 如何使用setSelection在swt表上设置选择并将reveal
- 一个通用的Java正则匹配工具(检查邮箱名、电话号码、用户密
- Java -jar:访问外部配置文件
- java – 在Eclipse大纲中搜索特定的返回类型
- java – 在pom.xml中包含proguard配置文件
- Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll
- 如何使用mybatis generator代码生成?
- Struts2 ActionContext.getContext().get(Object key)法:获
- Java内部类的全限定名规律代码示例