簡體   English   中英

OpenGL高度圖terrain渲染不繪制

[英]OpenGL heightmap terrain render does not draw

我有一個從dted文件創建的位圖映射。 我想使用該位圖並創建3d地形渲染。 我正在嘗試使用頂點矢量來實現,但是我根本達不到目標。 這是我的paintGL代碼:

void render::paintGL(){
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glTranslatef(0,0,-100);
for(int z=0;z<dted.width()-1;z++){
    glBegin(GL_TRIANGLE_STRIP);
    for(int x = 0; x<dted.height()-1; x++){
        glColor3f(matrix[x][z], matrix[x][z], matrix[x][z]);
        glVertex3f(x, matrix[x][z], -z);
        //vertex0 ends here

        glColor3f(matrix[x+1][z], matrix[x+1][z], matrix[x+1][z]);
        glVertex3f(x+1, matrix[x+1][z], -z);
        //vertex1 ends here

        glColor3f(matrix[x][z+1], matrix[x][z+1], matrix[x][z+1]);
        glVertex3f(x, matrix[x][z+1], -z-1);
        //vertex2 ends here

        glColor3f(matrix[x+1][z+1], matrix[x+1][z+1], matrix[x+1][z+1]);
        glVertex3f(x+1, matrix[x+1][z+1], -z-1);
        //vertex3 ends here


    }
    glEnd();
}}

由於互聯網問題,我不得不編寫代碼而不是復制粘貼。 因此,有些事情我可能忘記了,但我已經盡力了。 讓我解釋上面的變量和其他內容:

dted是我創建的dted圖像,我根據該圖像的寬度和高度值設置邊界。 矩陣是一個二維矩陣,其中包含我從預先創建的dted圖像像素獲得的高程值。

上面所有代碼之后,我無法渲染地形。 我不知道它是否渲染了地形,但它只是不顯示給我,還是根本不渲染。 如果您解釋我的錯誤在哪里並提出解決方案,那就太好了。

對不起,如果我做任何語法錯誤,我希望我能很好地解釋我的問題。 如果我提供的代碼不足,請隨時提及,我也可以將其他部分記下來。

祝你今天愉快。

編輯:好的,我在這里得到了一個新鮮的消息。 在克服了鼠標問題的控制后,我設法畫了一個平原。 但是,當我嘗試獲取振幅時,它什么也沒顯示。 我猜是因為振幅太大,但是當我將其除以15之類的常數時,相同的平原再次出現。 這是因為我使用了GL_TRIANGLE_STRIP嗎?

您的渲染代碼似乎很奇怪:您用退化的三角形構建了Tri Strip,並可能訪問不存在的數據。 我猜到了其余的方法,並試圖修復您的方法。 嘗試這個:

void render::paintGL(){
  glLoadIdentity();
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_MODELVIEW);
  glTranslatef(0,0,-100);
  for(int z = 0; z < dted.width() - 2; z++) {
    glBegin(GL_TRIANGLE_STRIP);
    for(int x = 0; x < dted.height() - 1; x++){
        glColor3f(matrix[x][z], matrix[x][z], matrix[x][z]);
        glVertex3f(x, matrix[x][z], -z);
        //vertex0 ends here

        glColor3f(matrix[x][z + 1], matrix[x][z + 1], matrix[x][z + 1]);
        glVertex3f(x, matrix[x][z + 1], -z - 1);
        //vertex1 ends here

    }
    glEnd();
}}

除此之外,三角形條也可以。 如果仍然看不到任何內容,請遵循Sga的建議並使用GL_POINTS。 然后修復您的相機/其他渲染代碼,直到看到它們為止。

對於正在尋找解決方案的其他人員:確保glFrustum的zNear參數足夠遠,可以看到事物。 我的礦要關閉,當我增加它時,問題就解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM