正确使用深度测试在OpenGL中渲染表面

时间:2019-04-30 23:17:57

标签: c++ opengl depth-buffer

我想知道如何使用深度测试正确渲染曲面。就我而言,尽管已启用,但它无法正常工作。我尝试了许多组合,但无法弄清楚做错了什么,可能是OpenGL命令的某些顺序,或者可能是我完全不知道的事情。

我有这段代码,该代码使用opengl渲染我正在开发的2d游戏。我想启用z缓冲和深度测试以简化代码中的内容。我在线阅读了许多教程,并根据指示进行了更改,但无法弄清为什么它不起作用。

主函数的代码如下所示,我将两个正方形的z值分别更改为-10和-25并稍后交换它们,但是我总是在第一个正方形上渲染第一个正方形无论我使用什么值:

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration
{
   /**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('author_id')->unsigned();
        $table->foreign('author_id')->references('id')->on('users')->onDelete('restrict');
        $table->integer('category_id')->unsigned();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('restrict');
        $table->string('title');
        $table->string('slug')->unique();
        $table->text('excerpt');
        $table->mediumText('body');
        $table->string('image')->nullable();
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('posts');
}
}

无论我将z分配给两个面的z值如何,最终结果总是相同的,结果可以看到here

enter image description here

任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

设置要绘制的SDL表面时,是否在调用SDL_CreateWindow之前要求深度缓冲?

SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);