OenGLで三角形を描画すると色がおかしくなる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
bonbo

OenGLで三角形を描画すると色がおかしくなる

#1

投稿記事 by bonbo » 12年前

早速ですが質問させていただきます。
OpenGLで3角形を描画しようと思い、以下のような関数をつくったのですが
頂点の一つの色がおかしくなります(具体的には、赤でぬりつぶしたいの青くなります)。
どこがおかしいのでしょうか。

コード:

typedef unsigned long DWORD;
typedef DWORD D3DCOLOR;

void DrawTriangle(float x0, float y0, float x1, float y1,float x2,float y2,D3DCOLOR col){
//
// 長方形の描画関数から行列を減らし、三角形の描画関数にしようと試みた
// 
    unsigned int alpha = (col &0xff000000)>>24;
    unsigned int red= (col &0x00ff0000)>>16;
    unsigned int green = (col &0x0000ff00)>> 8;
    unsigned int blue =  col &0x000000ff;
	const GLfloat triangleVertices[] = {
        x0,	y0,
        x1,	y1,
        x2,	y2,
    };

    const GLubyte triangleColors[] = {
        (red), (green), (blue) ,(alpha),
        (red), (green), (blue) ,(alpha),
	(red), (green), (blue) ,(alpha),
    };
	
	//三角形を描画するが、色がおかしい
	glVertexPointer(2, GL_FLOAT, 0, triangleVertices);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColorPointer(3, GL_UNSIGNED_BYTE, 0, triangleColors);
    glEnableClientState(GL_COLOR_ARRAY);
    
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
	
}
以上が描画関数

コード:

int main(){
//~~
//~~上下にいろいろあって
//~~
DrawTriangle(0, 0, 10, 60, 80, 50,((D3DCOLOR)((((255)&0xff)<<24)|(((255)&0xff)<<16)|(((1)&0xff)<<8)|((1)&0xff))));
//~~
//~~上記の(80,50)の点の色がおかしい
//~~
}
初歩的な質問ですみません。
環境はXcode5です。
よろしくおねがいします。

bonbo

Re: OenGLで三角形を描画すると色がおかしくなる

#2

投稿記事 by bonbo » 12年前

ちなみに四角形は問題なく描画できるため

コード:

void DrawTriangle(float x0, float y0, float x1, float y1,float x2,float y2,D3DCOLOR col){
    
    unsigned int alpha = (col &0xff000000)>>24;
    unsigned int red= (col &0x00ff0000)>>16;
    unsigned int green = (col &0x0000ff00)>> 8;
    unsigned int blue =  col &0x000000ff;
    
	//長方形を構成する四つの頂点の座標を決定します
	const GLfloat triangleVertices[] = {
        x0,	y0,
        x0,	y0,
        x1,	y1,
        x2,	y2,
    };
	
	//長方形を構成する四つの頂点の色を指定します
	//ここではすべての頂点を同じ色にしています
    const GLubyte triangleColors[] = {
        static_cast<GLubyte>(red), static_cast<GLubyte>(green), static_cast<GLubyte>(blue) ,static_cast<GLubyte>(alpha),
        static_cast<GLubyte>(red), static_cast<GLubyte>(green), static_cast<GLubyte>(blue) ,static_cast<GLubyte>(alpha),
		static_cast<GLubyte>(red), static_cast<GLubyte>(green), static_cast<GLubyte>(blue) ,static_cast<GLubyte>(alpha),
        static_cast<GLubyte>(red), static_cast<GLubyte>(green), static_cast<GLubyte>(blue) ,static_cast<GLubyte>(alpha),
    };
	
	//長方形を描画します
	glVertexPointer(2, GL_FLOAT, 0, triangleVertices);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColorPointer(4, GL_UNSIGNED_BYTE, 0, triangleColors);
    glEnableClientState(GL_COLOR_ARRAY);
    
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
	
}
のようにして無理矢理三角形をつくることはできるのですが、
これだと無駄があるような気がします。
パラメータの値が間違っているのでしょうか。

bonbo

Re: OenGLで三角形を描画すると色がおかしくなる

#3

投稿記事 by bonbo » 12年前

たびたび補足ですが
static_cast<GLubyte>
はc++11で警告が出るためにつけているだけで深い意味はありません。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: OenGLで三角形を描画すると色がおかしくなる

#4

投稿記事 by h2so5 » 12年前

glColorPointer の第一引数を4にしてください。

bonbo

Re: OenGLで三角形を描画すると色がおかしくなる

#5

投稿記事 by bonbo » 12年前

>h2so5さん
ありがとうございます。
できました。

ありがとうございました。

閉鎖

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