OpenGLで画面が描画されない原因が知りたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
syoshinsya
記事: 2
登録日時: 4年前

OpenGLで画面が描画されない原因が知りたい

#1

投稿記事 by syoshinsya » 4年前

提示コードですがなぜ頂点が描画できないのでしょうか?glVetex3f();という関数が実行できるのでGenerateOutput();関数は毎フレーム呼び出す関数ですが初期化は完了していると思われます。なぜ描画できないのでしょうか?またどれを毎フレームでどれを一回だけつまりvoid Initに置けばいいかも教えて頂きたいです。







bool Game::Initialization()
{
Debug::CreateConsoleWindow();
GLsizei buffer;
///////////////////////////////////////////////////フラグメントシェーダーを読み込む
const char* file_path = "Assets/Shader/Basic.frag";
GLenum shader_type = GL_FRAGMENT_SHADER;

std::ifstream ifs(file_path);
if(ifs.is_open() && true)
{
std::stringstream ss;
ss << ifs.rdbuf();
std::string str = ss.str();
const char* source = str.c_str();

//シェーダーオブジェクトを作成
GLint out_shader = glCreateShader(shader_type);
printfInfo(out_shader);


//シェーダーソースを読み込む
glShaderSource(out_shader, 1, &source, nullptr);
printfInfo(out_shader);

//シェーダーをコンパイル
glCompileShader(out_shader);
printfInfo(out_shader);


mShaderProgram = glCreateProgram();
printfInfo(out_shader);

glLinkProgram(mShaderProgram);
printfInfo(out_shader);

glAttachShader(mShaderProgram,out_shader);
printfInfo(out_shader);


glDeleteShader(out_shader);

printf("正常にフラグメントシェーダーを読み込みました\n");

}else{
printf("フラグメントシェーダーがありません。\n");
return false;
}



///////////////////////////////////////////////////バーティックスシェーダーを読み込む
const char* file_path_ = "Assets/Shader/Basic.vert";
GLenum _shader_type = GL_VERTEX_SHADER;

std::ifstream sifs(file_path_);
if(sifs.is_open() && true)
{
std::stringstream ss;
ss << sifs.rdbuf();
std::string str = ss.str();
const char* source = str.c_str();

GLint _out_shader = glCreateShader(_shader_type);
printfInfo(_out_shader);

glShaderSource(_out_shader, 1, &source, nullptr);
printfInfo(_out_shader);

glCompileShader(_out_shader);
printfInfo(_out_shader);



mShaderProgram = glCreateProgram();
printfInfo(_out_shader);


glLinkProgram(mShaderProgram);
printfInfo(_out_shader);


glAttachShader(mShaderProgram,_out_shader);
printfInfo(_out_shader);


glDeleteShader(_out_shader);

printf("正常にバーティックスシェーダーを読み込みました\n");


}else{
printf("バーティックスシェーダーがありません。\n");
return false;
}

glBindAttribLocation(mShaderProgram,0,"index");







/*
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2,GL_FLOAT,0,vertex);

// Create vertex array
glGenVertexArrays(1, &mVertexArray);
glBindVertexArray(mVertexArray);

// Create vertex buffer
glGenBuffers(1, &mVertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, mVertexBuffer);
glBufferData(GL_ARRAY_BUFFER, 6 * 3 * sizeof(float), vertex, GL_STATIC_DRAW);

// Create index buffer
glGenBuffers(1, &mIndexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4 * sizeof(unsigned int), index, GL_STATIC_DRAW);

// Specify the vertex attributes
// (For now, assume one vertex format)
// Position is 3 floats starting at offset 0
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, 0);

glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5,reinterpret_cast<void*>(sizeof(float) * 3));

*/
return true;
}

GLubyte mask[128];
//Renderer
void Game::GenerateOutput()
{

//////////////////////////////////////////////////////////////
//glBegin(GL_POLYGON);




//glEnd();
//////////////////////////////////////////////////////////////

}


//////////頂点シェーダー
// Request GLSL 3.3
#version 330

// This should correspond to the data stored
// for each vertex in the vertex buffer.
// For now, just a position.
in vec3 inPosition;

void main()
{
// The vertex shader needs to output a 4D
// coordinate.
// For now set the 4th coordinate to 1.0
gl_Position = vec4(inPosition, 1.0);
}


////////////////フラグメントシェーダー
out vec4 outColor;

void main()
{
// RGBA of 100% blue, 100% opaque
outColor = vec4(0.0, 0.0, 1.0, 1.0);
}

アバター
あたっしゅ
記事: 667
登録日時: 14年前
住所: 東京23区
連絡を取る:

Re: OpenGLで画面が描画されない原因が知りたい

#2

投稿記事 by あたっしゅ » 4年前

 ミクプラには OpenGL に詳しい人も、いないようだ。
 OpenGL に関する質問は、

https://teratail.com/tags/OpenGL
OpenGLに関連する質問一覧|teratail(ja)

https://ja.stackoverflow.com/questions/tagged/opengl
新着の 'opengl' 質問 - スタック・オーバーフロー(ja)

https://www.itmedia.co.jp/qa/opengl.html
「OpenGL」最新質問一覧 - 質問!ITmedia(ja)

https://chiebukuro.yahoo.co.jp/search?p=OpenGL&type=tag
「OpenGL」に関するQ&A - Yahoo!知恵袋(ja)

https://tokoik.github.io/opengl/faq.html
Frequently Asked Questions(ja)

 例によって、質問は多いが、回答されているとは限らない。

 とりあえず、OpenGL のバージョンで、glBegin/glEnd 使ったり、使わなかったりするし、
OpenGL のフレームワーク GLUT だか、 GLEW だかあったり、質問主は、独自の class 化をしてたりする。
質問主のレベルがよくわからないので、少なくとも、手提鞄自身の為に、メモっておく。
[OpenGL シェーダー]

http://marina.sys.wakayama-u.ac.jp/~tok ... e=20051006
床井研究室 - 第1回 シェーダプログラムの読み込み(ja)


https://codelabo.com/posts/20200228150223
GLSL シェーダーを触ってみよう - CodeLabo(ja)


http://www.opengl-tutorial.org/jp/begin ... -triangle/
チュートリアル 2:最初の三角形(ja)


https://www.it-swarm.dev/ja/c%2B%2B/c-% ... 042526404/
c++ ? C ++ソフトウェアで GLSL シェーダーを実際に出荷する方法(ja)


https://sites.google.com/site/monshonos ... opengl_002
OpenGL の話 第2回 - もんしょの巣穴(ja)

おもちゃラボ

https://nn-hokuson.hatenablog.com/entry ... /07/204241
【OpenGL でゲームを作る】シェーダって何? GLSL への第一歩 - おもちゃラボ(ja)


https://nn-hokuson.hatenablog.com/entry ... /08/201706
【OpenGL】VBOを使って描画を高速化しよう - おもちゃラボ(ja)


https://nn-hokuson.hatenablog.com/entry ... /10/201706
【OpenGLでゲームを作る】三角形のポリゴンを表示する - おもちゃラボ(ja)


https://nn-hokuson.hatenablog.com/entry ... /17/193833
【OpenGLでゲームを作る】四角形と円のポリゴンを書く - おもちゃラボ(ja)


https://nn-hokuson.hatenablog.com/entry ... /21/200021
【OpenGLでゲームを作る】四角形のポリゴンにシェーダで色を塗る - おもちゃラボ(ja)


https://nn-hokuson.hatenablog.com/entry ... /24/171230
【OpenGLでゲームを作る】テクスチャを表示する - おもちゃラボ(ja)


https://nn-hokuson.hatenablog.com/entry ... /08/213247
【OpenGLでゲームを作る】複数のテクスチャを表示する - おもちゃラボ(ja)
VTuber:
[香車]東上☆Aho(暎帆)☆海美
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: OpenGLで画面が描画されない原因が知りたい

#3

投稿記事 by usao » 4年前

> GenerateOutput();関数は毎フレーム呼び出す関数ですが…

とか言われたって,その関数の中身空っぽですやん?
その時点で既に話自体が謎.

「何も書いてないから描画されません><」って話ならば,「そりゃそうだろうね」としか.

そうではなくて,「そこに何もコード書かなくても勝手に何かが描画される仕組みが存在するんですが?」みたいな話なのだろうか?
だったらその関数自体がいらねぇわけだから,それについて言及している意味もわからんし.


#日本語文章とか行動とかが虐殺君に似すぎているのも各所で真面目に相手にされない要因なのではなかろうか

返信

“C言語何でも質問掲示板” へ戻る