Opengl在每次点击中添加一个新对象?

时间:2017-10-14 20:20:10

标签: c opengl glut

var wasmModule = new WebAssembly.Module(wasmCode);
var wasmInstance = new WebAssembly.Instance(wasmModule, wasmImports);

// obtain the offset to the array
var offset = wasmInstance.exports.getData();

// create a view on the memory that points to this array
var linearMemory = new Uint32Array(wasmInstance.exports.memory.buffer, offset, 10);

// populate with some data
for (var i = 0; i < linearMemory.length; i++) {
  linearMemory[i] = i;
}

// mutate the array within the WebAssembly module
wasmInstance.exports.add(10);

// log the results
for (var i = 0; i < linearMemory.length; i++) {
  log(linearMemory[i]);
}

我有关于opengl onclick功能的问题。我绘制了一个对象(原始房子),当我点击鼠标时我想显示它。我怎么能这样做?

我的老师给出了这个命令:“在用户按下鼠标左键后,在第一部分中添加一个新对象。每次单击都会在点击位置添加一个新对象。最多可以创建10个对象然后,每次点击后,新对象应该替换第一个对象。

1 个答案:

答案 0 :(得分:0)

一种可能的倾向是将鼠标位置存储在长度为10的数组中。每次单击都会向数组添加一个新条目。如果数组已满,则条目将被覆盖:

#define MAX_OBJ 10

int pos_x[MAX_OBJ], pos_y[MAX_OBJ];
int count  = 0;
int next_i = 0;

void onClick(int button, int state, int x, int y)
{
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    {
       pos_x[next_i] = x;
       pos_y[next_i] = y;
       next_i ++;
       if ( next_i == MAX_OBJ ) next_i = 0;
       if ( count < MAX_OBJ )   count ++;
    }
}

在主循环中,您可以将对象绘制到已知位置:

for( int i = 0; i < MAX_OBJ; ++ i )
    drawHouse( pos_x[i], pos_y[i] );