1

次の動的3D配列を OpenGL glDrawPixels()でどのように描画しますか? ここでドキュメントを見つけることができます: http://opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/drawpixels.html

float ***array3d;

void InitScreenArray()
{
    int i, j;

    int screenX = scene.camera.vres;
    int screenY = scene.camera.hres;

    array3d = (float ***)malloc(sizeof(float **) * screenX);

    for (i = 0 ;  i < screenX; i++) {
        array3d[i] = (float **)malloc(sizeof(float *) * screenY);

        for (j = 0; j < screenY; j++)
          array3d[i][j] = (float *)malloc(sizeof(float) * /*Z_SIZE*/ 3);
    }
}

次のヘッダー ファイルのみを使用できます。

#include <math.h>
#include <stdlib.h>
#include <windows.h>     

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h> 
4

3 に答える 3

4

ええと...あなたはそれぞれの単一のピクセルを別々に割り当てているのでmalloc()、あなたはまた、別々の呼び出しで各ピクセルを描く必要がありglDrawPixels()ます。これは(明らかに)非常識です。ビットマップグラフィックスの考え方は、ピクセルが隣接するコンパクトな形式で格納されるため、あるピクセルから別のピクセルにすばやくすばやく移動できるようにすることです(O(1) )。これは私には非常に混乱しているように見えます。

より賢明なアプローチは、「3D配列」(多くの場合、ピクセルの2D配列と呼ばれ、各ピクセルが赤、緑、青のコンポーネントで構成されている)をmalloc()、のように1回呼び出すことで割り当てることです( C):

float *array3d;
array3d = malloc(scene.camera.hres * scene.camera.vres * 3 * sizeof *array3d);
于 2008-11-04T12:44:28.870 に答える
1

おかげでくつろげます。gamedev.netで同じアドバイスを得たので、次のアルゴリズムを実装しました。

typedef struct
{
    GLfloat R, G, B;
} color_t;

color_t *array1d;

void InitScreenArray()
{   
        long screenX = scene.camera.vres;
    long screenY = scene.camera.hres;
        array1d = (color_t *)malloc(screenX * screenY * sizeof(color_t));
}

void SetScreenColor(int x, int y, float red, float green, float blue)
{
    int screenX = scene.camera.vres;
    int screenY = scene.camera.hres;

    array1d[x + y*screenY].R = red;
    array1d[x + y*screenY].G = green;
    array1d[x + y*screenY].B = blue;
}

void onDisplay( ) 
{
    glClearColor(0.1f, 0.2f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glRasterPos2i(0,0); 
    glDrawPixels(scene.camera.hres, scene.camera.vres, GL_RGB, GL_FLOAT, array1d);

    glFinish();
    glutSwapBuffers();
}

私のアプリケーションはまだ動作しません (画面に何も表示されません) が、これは私のせいで、このコードは動作すると思います。

于 2008-11-04T15:17:33.537 に答える
0

代わりにglTexImage2D()を使用したくないですか:ここを参照してください

于 2009-12-27T00:52:47.730 に答える