Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


aGuyWhoSucksAtOpenGL

Member Since 28 May 2013
Offline Last Active Jun 16 2013 02:05 AM

Topics I've Started

Move glVertex Position

13 June 2013 - 01:17 PM

Hi,
 
I usually only turn to forums when I'm completely and utterly stuck on a problem, and guess what? I'm completely and utterly stuck! Each time I think I've figured out a way for my code to work, I rush to my keyboard and my ideas are quickly shot down.
 
My question is, how do I actively re-position a trianglestrip as the program is running?  
 
I'll be honest, I have pretty much no clue as to how to do this without reloading both the image and texture. The code I was previously using, used a timer that refreshed the screen every 0.05s and each time it did so, it was re-allocating and re-drawing my texture. Not the most efficient way to move an image. 
 
This is the code I'm currently using in order to display the image and set it's position (coding in Obj-C):
-(void)addSprite{ // This code works btw, image is drawn on screen and positioned accordingly 
self.player = [[GLSprite alloc] initWithFile:@"logo2" fileFormat:@"png"];
self.player.positionX = 100;
[self.player render];
}
 
This is the code I'm trying to use to loop the render function in order to redraw it (am I even correct in doing this?). This code doesn't work at all (image doesn't show up) but it's a rough attempt at what I'm trying to do.
[NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval) 0.05 target:self selector:@selector(update) userInfo:nil repeats:YES];

-(void)update{
myInt += 1;
if (myInt < 2) {
// Calls alloc once
self.player = [[GLSprite alloc] initWithFile:@"logo2" fileFormat:@"png"];
NSLog(@"ALLOC"); 
}
// Render, render, render that image
self.player.positionX += 10; // Increments x coordinate every 0.05s (will eventually revert xPos to be dependant on mouse) 
[self.player render];
NSLog(@"RENDER"); 
}
 
And finally, here's the implementation of the functions from the above code: 
-(id)initWithFile:(NSString *)imageName fileFormat: (NSString *) format{
if ((self = [super init])) {
[GLSprite getWindowSize];

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
 [NSNumber numberWithBool:YES],
 GLKTextureLoaderOriginBottomLeft,
 nil];

NSString *imageURL, *dirImage;
imageURL = [NSString stringWithFormat:@"images/%@", imageName];
dirImage = [[NSBundle mainBundle] pathForResource:imageURL ofType:format];

NSError *error;
self.texture = [GLKTextureLoader textureWithContentsOfFile:dirImage options:options error:&error];
if (error) {
NSLog(@"Error loading texture from image: %@",error);
}
}
return self;
} 

-(void)render{
x = (self.texture.width / window.x);
y = (self.texture.height / window.y);

self.initPositionX = (self.positionX / window.x) * 2;
self.initPositionY = (self.positionY / window.y) * 2;

xCoord[0] = 0 - x; yCoord[0] = 0 - y;
xCoord[1] = 0 + x; yCoord[1] = 0 - y;
xCoord[2] = 0 - x; yCoord[2] = 0 + y;
xCoord[3] = 0 + x; yCoord[3] = 0 + y;

NSLog(@"Render: %f", self.initPositionX);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glBegin(GL_TRIANGLE_STRIP);
glTexCoord2d(0.0, 0.0); glVertex2d(xCoord[0] + self.initPositionX, yCoord[0] + self.initPositionY);
glTexCoord2d(1.0, 0.0); glVertex2d(xCoord[1] + self.initPositionX, yCoord[1] + self.initPositionY);
glTexCoord2d(0.0, 1.0); glVertex2d(xCoord[2] + self.initPositionX, yCoord[2] + self.initPositionY);
glTexCoord2d(1.0, 1.0); glVertex2d(xCoord[3] + self.initPositionX, yCoord[3] + self.initPositionY);
glEnd();
}
 
I'm most likely completely wrong in what I'm trying to achieve so any help would be great, thanks!

Problem with texture mapping

28 May 2013 - 04:59 PM

Hi all, 

 

Today was my first step into the mighty land of OpenGL and so the first task I set myself- after playing around with shapes and colours- was to display an image on screen. So far, I've been attempting to texturise a quad for the past 5/6 hours with not much luck, well, none at all really. The rest of the code seems to work fine, I just can't get the texture to show. As a side note, my eyes are beginning to glaze over right now, so if anything I say doesn't make sense, just skip a few lines and see if that does the trick.

 

What choo doing? I'm using SOIL in my code, so the problem may lie with that if the rest of the code seems fine. If you lovely people could check my code for mistakes, I'd greatly appreciate it, thanks! As I said, I'm still a noob and so I can't figure out where I've gone wrong. As for my code, I'm writing this on a mac, so some functions are written in obj-c.

 

Where yo' code at?

-(void) loadTextures{
    
    GLuint textures[1];
    glGenTextures( 1, textures );
	
    int width, height;
    width = 128;
    height = 256;
    unsigned char *image;
    
    glBindTexture( GL_TEXTURE_2D, textures[0] );
    image = SOIL_load_image( "logo.png", &width, &height, 0, SOIL_LOAD_RGB );
    glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image );
    SOIL_free_image_data( image );
    
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    
    glBegin(GL_QUADS);
    
    glTexCoord2d(0.0, 0.0); glVertex2d(-0.5, -0.5);
    glTexCoord2d(1.0, 0.0); glVertex2d(-0.5, 0.5);
    glTexCoord2d(1.0, 1.0); glVertex2d(0.5, 0.5);
    glTexCoord2d(0.0, 1.0); glVertex2d(0.5, -0.5);
    
    glEnd();
}


- (void)drawRect:(NSRect)dirtyRect
{
    glClearColor(0, 104.0/255.0, 55.0/255.0, 1.0); // rgba ; Red, Green, Blue, Alpha (transparency)
    glClear(GL_COLOR_BUFFER_BIT); // if no buffer is present, glclear has no effect. glclear clears buffers to preset values.
    MyOpenGLView *GLView = [[MyOpenGLView alloc] init];
    [GLView loadTextures];
    glFlush(); // forces execution of GL commands.
}

 

 

I'm off to sleep now, this code -albeit small- has worn me out. Any responses would be fantastic, I've looked over and over my code, checked with what seems like a million other pieces of source code and yet I still can't figure out the issue, obviously there is, as the texture isn't loading! If I don't respond within a couple of minutes, odds are I'm asleep, but any responses would be much appreciated and I'll be sure to reply back in around 6 hours time.

 

Thanks!

 

Edit: Here's what I'm getting at the moment: http://i.imgur.com/JOFaYG6.png


PARTNERS