2012-12-11 1 views
4

그림을 보여 주려고했으나 표시되지 않았다.OpenGL 목적으로 텍스쳐를 그린다. o

은 여기 NSOpenGLView의 서브 클래스 내 코드입니다 : 그것은 사각형을 그립니다

// 
// MyOpenGLView.m 
// OpenGLTests 
// 
// Created by Tom Schamberger on 10.12.12. 
// Copyright (c) 2012 Tom Schamberger. All rights reserved. 
// 

#import "MyOpenGLView.h" 

@implementation MyOpenGLView 

- (id)initWithFrame:(NSRect)frame 
{ 
    NSOpenGLPixelFormat * pf = [MyOpenGLView basicPixelFormat]; 

    self = [super initWithFrame: frame pixelFormat: pf]; 
    return self; 
} 

+ (NSOpenGLPixelFormat*) basicPixelFormat 
{ 
    NSOpenGLPixelFormatAttribute attributes [] = { 
     NSOpenGLPFAWindow, 
     NSOpenGLPFADoubleBuffer, // double buffered 
     NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)16, // 16 bit depth buffer 
     (NSOpenGLPixelFormatAttribute)nil 
    }; 
    return [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; 
} 

- (void) prepareOpenGL 
{ 
    glEnable(GL_DEPTH_TEST); 

    glShadeModel(GL_SMOOTH); 
    glEnable(GL_CULL_FACE); 
    glFrontFace(GL_CCW); 
    glPolygonOffset (1.0f, 1.0f); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); 

    if([self loadTextures]) 
     NSLog(@"Load"); 
} 

- (void)drawRect:(NSRect)dirtyRect 
{ 
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 
    glColor3f(1, 1, 1); 
    glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 0.0f); 
    glVertex2f(-0.5f, -0.5f); 
    glTexCoord2f(1.0f, 0.0f); 
    glVertex2f( 0.5f, -0.5f); 
    glTexCoord2f(1.0f, 1.0f); 
    glVertex2f( 0.5f, 0.5f); 
    glTexCoord2f(0.0f, 1.0f); 
    glVertex2f(-0.5f, 0.5f); 
    glEnd(); 

    glFlush(); 
} 

- (BOOL) loadTextures 
{ 
    NSImage *img = [NSImage imageNamed:@"NeHe.bmp"]; 
    if(img == nil) 
     return FALSE; 
    else if(img.size.height == 0 || img.size.width == 0) 
     return FALSE; 
    NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithData: [img TIFFRepresentation]]; 
    glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, rep.size.width, 
       rep.size.height, 0, GL_RGB, 
       GL_UNSIGNED_BYTE, rep.bitmapData); 
    return TRUE; 
} 
@end 

하지만, 텍스처가 표시되지 않습니다.

+0

거기에 'glPolygonMode()'가 무엇입니까? 특히 채워진 쿼드가 필요한 경우에 특히 그렇습니다. – genpfault

+0

그건 문제가되지 않습니다. 나는 'glPolygenMode()'없이 이미 시도했다. – tleport88

+1

이제 문제가 발견되었습니다! glEnable (GL_TEXTURE_2D)'만 잊었습니다. – tleport88

답변

0

당신은 아마 질감의 작품을로드하기 위해 0.0보다는 0.5

이 코드에 당신에게 투명 색상의 알파를 설정해야합니다.

backGroundPath = @"Background.bmp"; 

NSData* backGroundData = [NSData dataWithContentsOfFile:backGroundPath options:NSUncachedRead error:nil]; 
backGroundImage = [NSBitmapImageRep imageRepWithData:backGroundData]; 

glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glGenTextures(1, backGroundTexture); 

glBindTexture(GL_TEXTURE_2D, backGroundTexture[0]); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
       GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
       GL_NEAREST); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, backGroundImage.size.width, 
      backGroundImage.size.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 
      backGroundImage.bitmapData); 
관련 문제