我正在尝试实现下面描述的技术:用深度合成图像.
我们的想法是使用现有纹理(从图像加载)作为深度蒙版,基本上伪造3D.
我面临的问题是在openglES中没有glDrawPixels.有没有办法在iPhone上完成同样的事情?
我需要缩放glDrawPixels图像的结果.
我正在Qt QGLWidget中使用glDrawPixels绘制一个640x480像素的图像缓冲区.
我尝试在PaintGL中执行以下操作:
glScalef(windowWidth/640, windowHeight/480, 0);
glDrawPixels(640,480,GL_RGB,GL_UNSIGNED_BYTE,frame);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我正在使用小部件的大小设置OpenGL视口和glOrtho:
void WdtRGB::paintGL() {
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Setup the OpenGL viewpoint
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, windowWidth, windowHeight, 0, -1.0, 1.0);
glDepthMask(0);
//glRasterPos2i(0, 0);
glScalef(windowWidth/640, windowHeight/480, 0);
glDrawPixels(640,480,GL_RGB,GL_UNSIGNED_BYTE,frame);
}
//where windowWidth and windowHeight corresponds to the widget size.
/the init functions are:
void WdtRGB::initializeGL() {
glClearColor ( 0.8, 0.8, 0.8, 0.0); // Background to a grey tone
/* initialize viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, windowWidth, windowHeight, 0, -1.0, 1.0);
glEnable …Run Code Online (Sandbox Code Playgroud) 我的团队目前仅限于在opengl 1.4平台上绘制图像,这意味着我们不能使用任何漂亮的纹理映射来绘制图像(是的,我们仅限于使用intel集成图形平台,这非常烦人).到目前为止,我们能够绘制,缩放和翻转图像,但是做图形的人声称在使用glDrawPixels时无法通过glRotate进行旋转,我们必须转到纹理等等,哪些不适用于英特尔平台.
我敢打赌他午餐时有一个旋转功能,比如glRotate,它可以用于直接位图.这样的功能存在吗?glRotate会工作吗?我对这个图形事物有点新手,但是除了通过纹理旋转之外,库不允许位图旋转似乎很荒谬.
谢谢.
这是代码.输出是一个灰色的正方形 - 无论输入是什么,它显然是错误的.我的目标是能够将所有像素存储在某处并显示它们,以便我可以继续使用简单的光线跟踪器,而我似乎无法弄清楚这个glDrawPixels的事情.
#include <stdlib.h>
#include <GL/glut.h >
using namespace std;
struct RGBType {
float r;
float g;
float b;
//float a;
};
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
RGBType *pixels = new RGBType[250*250];
for (int x = 0; x < 250; x++) {
for (int y = 0; y < 250; y++) {
pixels->r = 0;
pixels->g = 1;
pixels->b = 1;
//pixels->a = 200;
}
}
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,250,250,GL_RGB,GL_UNSIGNED_BYTE,pixels);
//glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
glVertex3f(1.0, 1.0, 0.0); …Run Code Online (Sandbox Code Playgroud)