Ipphones

  • Subscribe to our RSS feed.
  • Twitter
  • StumbleUpon
  • Reddit
  • Facebook
  • Digg

Monday, 12 January 2009

A Little Help

Posted on 13:37 by Unknown
I'm having a problem with OpenGL ES, and it's keeping me from finishing my particle engine post. I was hoping someone here could see what I'm doing. Here's the code that I have to draw a texture mapped particle. This version uses GL_TRIANGLES and glDrawArrays(), but I've had similar problems using GL_TRIANGLE_STRIP and glDrawElements()..

    case ParticleEmitter3DDrawTextureMap:
{
static const GLfloat squareStrip[18] = {
+0.01f, +0.01f, +0.0f,
-0.01f, +0.01f, +0.0f,
-0.01f, -0.01f, +0.0f,

+0.01f, +0.01f, +0.0f,
-0.01f, -0.01f, +0.0f,
+0.01f, -0.01f, +0.0f,
};
static const GLfloat tex[12] = {

1.0, 1.0,
0.0, 1.0,
0.0, 0.0,

1.0, 1.0,
0.0, 0.0,
1.0, 0.0,
};

//static const GLfloat squareNormals[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};

glScalef(oneParticle->particleSize, oneParticle->particleSize, oneParticle->particleSize);

[texture bind];
glEnable(GL_TEXTURE);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
//glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, squareStrip);
//glNormalPointer(GL_FLOAT, 0, squareNormals);
glTexCoordPointer(3, GL_FLOAT, 0, tex);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisable(GL_TEXTURE);
//glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
break;
}

As a test, I was mapping this image onto the sprites:

But, what I get is this:

My guess, this is either a texture coordinate issue or a blending function issue. I've tried many, many permutations, both with triangle strips and triangles, and using glDrawArrays() and glDrawElements(), and I've tried every permutation of texture coordinates I can think of, yet I've never been able to get both triangles mapped right.

Here's a slightly different version that gives the same result:
            case ParticleEmitter3DDrawTextureMap:
{
static const GLfloat squareVertices[12] = {
+0.01f, +0.01f, +0.0f,
-0.01f, +0.01f, +0.0f,
-0.01f, -0.01f, +0.0f,
+0.01f, -0.01f, +0.0f,
};
static const GLfloat tex[8] = {
1.0, 0.0,
0.0, 1.0,
0.0, 0.0,
1.0, 0.0,
};
static const GLushort triangle1[3] = {0,2,1};
static const GLushort triangle2[3] = {2,3,0};

//static const GLfloat squareNormals[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};

glScalef(oneParticle->particleSize, oneParticle->particleSize, oneParticle->particleSize);

[texture bind];
glEnable(GL_TEXTURE);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
//glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, squareVertices);
//glNormalPointer(GL_FLOAT, 0, squareNormals);
glTexCoordPointer(3, GL_FLOAT, 0, tex);
//glDrawArrays(GL_TRIANGLES, 0, 6);

glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, &triangle1);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, &triangle2);
glDisable(GL_TEXTURE);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
break;
}

The thing is, I know that these texture coordinates are right. I've copied verbatim the coordinates and drawing code from probably a half-dozen code samples and tutorials I found on the web. That, combined with the fact that I can't find any set of texture coordinates that works, makes me thing I'm doing something terribly wrong somewhere else. I tried switching the winding order of the triangle vertices, and that had no visible effect. I also played with the blending functions with no success.

If there's anyone out there who's pretty good with OpenGL who can point out the boneheaded thing I'm doing here, I would really appreciate it. I think it's possible that it's the same thing that was keeping me from getting the UV-mapped OBJ files to display correctly.

If you're the first person to figure out what I'm doing wrong, you're welcome to a free copy of Beginning iPhone Development, though if you can figure this out, you've probably no need of it. Unfortunately, I can't afford to spend more time on this right now, so unless someone can figure this out, the particle tutorial is probably going to go on a shelf for a few weeks while I dig out from the Macworld backlog.
Email ThisBlogThis!Share to XShare to Facebook
Posted in Help, OpenGL ES | No comments
Newer Post Older Post Home

0 comments:

Post a Comment

Subscribe to: Post Comments (Atom)

Popular Posts

  • Making OpenGL ES Screenshot
    The Bit-101 Blog has an entry that shows how to take a screenshot when using OpenGL ES . I tested this in my much-delayed particle-generato...
  • Adding CLANG to Your Build Process
    Frasier Spiers has a nifty piece this morning on using Git pre-commit hooks to automatically run the CLANG Static Analyzer. I'm not a G...
  • CLANG Static Analyzer
    If you aren't using the LLVM/Clang Static Analyzer , you really should be. The Clang Project is an attempt to write a front end for the...
  • A Little Help
    I'm having a problem with OpenGL ES, and it's keeping me from finishing my particle engine post. I was hoping someone here could see...
  • WWDC Accommodations
    Staying downtown in San Francisco is very expensive in the summertime. Bu, if you're going to WWDC, you really want to stay downtown. Yo...
  • Xcode File Templates and a Mystery
    One of the things that confuses many newcomers to Xcode is how to set it up so that your company name gets automatically filled in when you ...
  • Brain Surgery?
    Craig Hockenberry has an interesting post on his blog today about the iPhone background processing issue. Craig speaks from personal experi...
  • Book's Almost Done
    I just finished Chapter 16. I'll give it another read-over in the morning then it will go off to my writing partner for his review, then...
  • iPhone Alley
    Looks like Dave and I are going to make an appearance on the iPhone Alley Podcast next week. We're recording on Sunday night, so I woul...
  • Shuffling Arrays
    Ever want to randomize an array of items? It's a task that, for some reason, I've had to do a lot in recent programs. So, I wrote a ...

Categories

  • 3D Models
  • Ad Hoc Distribution
  • ADC
  • Address Book
  • Amazon
  • Anaglyphs
  • App Store
  • Apple
  • Apple DTS
  • Apple Store
  • Application Store
  • articles
  • Award
  • Background Processing
  • Barcodes
  • Beta
  • Blog
  • Blogger
  • Blogging
  • Blogs
  • Blogspot
  • Book project
  • Bug Reporting
  • Captain Obvious
  • Categories
  • Censorship
  • CFFoundation
  • CGAffineTransform
  • Clang Static Analyzer
  • Cocoa
  • Cocoa Touch
  • Code Reuse
  • Code Signing
  • Computer
  • conferences
  • Controller Classes
  • Core Animation
  • Daring Fireball
  • Database
  • Debugging
  • Defect
  • Delegates
  • Design Awards
  • Developer Certifications
  • Discussion Forums
  • Edit Mode
  • employment opportunities
  • Encryption
  • Enterprise
  • Errata
  • free code
  • Free software
  • Full Screen
  • Game Programming
  • Gestures
  • Getting Started
  • goof
  • Google Code
  • Google Maps
  • Gotcha
  • Help
  • HIG
  • HTTP PUT
  • Idiots
  • Idle Timer
  • Images
  • Instruments
  • Interface Builder
  • iPHone
  • iPhone Applications
  • iPhone Dev Center
  • iPhone Developers
  • iPhone OS 3.0
  • iPhone SDK
  • iPhone SDK PNG
  • iPhone Simulator
  • iPhoneSDK
  • iPod
  • Job Opportunities.
  • k
  • Key Value Observing
  • Keynote
  • KVO
  • Landscape Mode
  • Learn Cocoa
  • Learn Cocoa on the Mac
  • libxml
  • Licensing
  • Mac Developers
  • Mac OS X
  • Macworld Expo
  • Microsoft
  • NDA
  • NeHe
  • New Category
  • New Release
  • NSFileHandle
  • NSMutableArray
  • NSMutableURLRequest
  • NSXML
  • Object-Oriented Design
  • Objective-C
  • Open Source
  • OpenGL ES
  • Optimizations
  • Other blogs
  • Paired Arrays
  • Parsing
  • Particle Engine
  • Party
  • PeopleSoft
  • Performance
  • Persistence
  • Pink Screen of Death
  • Piracy
  • Pixar
  • Podcasts
  • Press Release WTF
  • Press Releases WTF
  • private APIs Google
  • Project Template
  • Properties
  • Random Numbers
  • Rant
  • Rejected
  • Resources
  • Responder Chain
  • REST
  • Reverse Engineering
  • Rumors
  • Runtime
  • Sample Code
  • Screencast
  • screenshot
  • Scroll Views
  • snippet
  • Snow Leopard.
  • SOAP
  • Sockets
  • Source
  • Splash Screen
  • SQLite
  • SQLitePersistentObjects
  • Steve Jobs
  • Steve-Note
  • Strings
  • Stupidity
  • Subversion
  • Table Views
  • Taps
  • Template
  • Tip
  • Tips
  • Tririga
  • tutorials
  • Twitter
  • UIAlertView
  • UIColor
  • UIImage
  • UIPickerView
  • UIScrollView
  • UITextField
  • UIView
  • UIWebView
  • Update
  • Utilities
  • UUID
  • Vacation
  • Version Control
  • Web Services
  • Writing
  • WTF
  • WWDC
  • Xcode
  • XML

Blog Archive

  • ▼  2009 (141)
    • ►  May (14)
    • ►  April (30)
    • ►  March (48)
    • ►  February (26)
    • ▼  January (23)
      • Longer Spinning & Blurring
      • Another SQLite Library
      • Twittering iPhone Developer List
      • A Better Generic Date Picker
      • Address Book UI Design Flaw
      • We got Slashdotted!
      • Table View Color
      • C++ and Performance
      • Unit Testing
      • HIG Nazis
      • Paired Arrays in Cocoa and Cocoa Touch
      • On the Benefits of an Economic Downturn
      • Another Particle Update
      • An iPhone Dev Conference
      • A Little Help
      • UUID Hint
      • Macworld 2009 Post Mortem
      • Accelerometer in the Simulator?
      • Particle Update
      • At the Airport
      • Macworld 2009
      • Another OpenGL Particle System Teaser
      • Happy New Year!
  • ►  2008 (163)
    • ►  December (46)
    • ►  November (25)
    • ►  October (44)
    • ►  September (2)
    • ►  August (5)
    • ►  July (2)
    • ►  June (9)
    • ►  May (2)
    • ►  April (11)
    • ►  March (17)
Powered by Blogger.

About Me

Unknown
View my complete profile