Archived

This topic is now archived and is closed to further replies.

Multiple Migs

OpenGL I said 2D OpenGL graphics baby

Recommended Posts

I am trying to display 2D images onto the screen (like a map with vehicles moving around on it). I would like to be able to scale these images and rotate them aswell. At the same time I would like to minimize distortion in these images. The images I am trying to display are simply a bunch of lines, polyline, polygones, etc... that are suppose to make up a wire frame display of maps and vehicles. 1. I am wondering which method of drawing/displaying these images is better (is faster an allows for scalling with the least distortion of the original image). Loading the image into a texture then binding it to a quad or drawing the images using Primatives? (The Textures would be loaded in the program as a Bitmap, and each Primatives points would be loaded into memory and then redrawn) 2. If I load the Primatives of one image into memory in my program from a file (as explained above). And I want to use this image as a background (Map). How do I display it on the screen without having to redraw the primitives everytime I want to update the map? Urg, sorry for being all over the place but I'm useless at explaining stuff only using text. Anyway, any help you can give me on my chaotic questions is much appreciated. Question at bottom of post aswell. Migs Edited by - Multiple Migs on April 26, 2001 5:36:25 PM

Share this post


Link to post
Share on other sites
It seems to me that either your use of language is flawed or you haven''t quite got your head around the basic ideas yet. (No offence intended)

Textures go onto primitives; therefore you have to have primitives to use textures. If the 2D display is gonna be a ''map'' over which vehicles will move, why would it need to be up to 40,000 vertices?

Stephen

Share this post


Link to post
Share on other sites
No offense intended, but it doesn''t make sence.
Either you''re spelling is wrong or you don''t know what the words you use excatly means...

Maybe you should try to talk about what you try to do at a higher level, like : how to do a 2D scrolling game with OpenGL.

-* So many things to do, so little time to spend. *-

Share this post


Link to post
Share on other sites
Grrrr!!!

I know that it might not seem to make any sence but it is hard to explain.

The images I am displaying are made up of lines, polylines, polygones, etc... I just happens that they contain anywhere from 300 to around 40,000 primatives (40,000 is extreme and probably will be reduced). Accuracy is important because I am trying to simulate real world coordinates on the maps.

Currently, I have a file that contains data on how to draw images with primatives (lines, arcs, polylines, etc..). The only reason i''m using this method is because I am under the impression that loading the same types of images (in Bitmap format) into a texture would not allow me to scale the image with the same accuracy as when I draw it with primatives. Capeech.

I know you need to put textures onto primatives, but what I want to know is.

1. Is there a significant difference in accuracy of the displayed image when. One it is in texture format attached to a quad, or two when the lines, polylines, etc... of the image are drawn individually?

I somewhat new to Graphics programming (OpenGL and DirectX) but I have been in programming for sometime now so I am quite sure that my understanding of the terms are correct.

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
There are ways to get both methods to display accurate images. If you''re just texturing a quad (I''m assuming this will be something like a billboard), then you''d have to probably use different images for the texture when you change the size of the object. If your using a 3D model (polyline, polygons or whatever) all you do is adjust the points a little and you have a larger model. Both have advantages and disadvantages... It''s up to you which you would prefer. In terms of speed, I would say using a texture on a quad is faster (fewer polygons to draw). Ok enough BSing for me, time to go back to sleep.

Share this post


Link to post
Share on other sites
>>1. Is there a significant difference in accuracy of the displayed image when. One it is in texture format attached to a quad, or two when the lines, polylines, etc... of the image are drawn individually?<<

there shouldnt be *that* much, there will be some mind cause the lines are working from the original object theyre bound to be more acurate, also with lines you can do line antialiasing.
of note though using lines is gonna be far slower esp if youre drawing 40000 LINES just for one model, how much slower prolly in the region of seconds per frame (with antialiasing)


http://members.xoom.com/myBollux

Share this post


Link to post
Share on other sites
Thank you all for you feedback!

I was also wondering if it is possible to Draw primatives onto a Bitmap, and then save the Bitmap as a texture? If the answer is yes, a nudge in the right direction would be greatly appreciated.

I want to do this so that I only have to redraw the primatives when I scale the image.

Thanks for yo time!

Mig

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
Any 3D package that can render can turn primitives into bitmaps. You can even write your own program to render primitives into bitmaps and save them as files. You can even skip the 3D packages and just draw the bitmaps in some 2D software.
Whenever you''re displaying something on the screen it''s basically an image that you''ve put together. It shouldn''t be that much more work to just save that as a file.

Share this post


Link to post
Share on other sites
Thanks for the reply!

Dumb question coming up. But that just means it should be easy to answer. heh heh heh.

Is there are min/max/optimum size for textures? Can they only be glued to a certain size primative?

Thanks for all the help.

Mig

Share this post


Link to post
Share on other sites
quote:
Original post by Multiple Migs

Is there are min/max/optimum size for textures?


The minimum size is 2 by 2 (I think, it could be 1 by 1) pixels. The maximum size is determined by your video card. For example: Most Voodoo''s can only handle 256 by 256 and down, while all nVidia cards newer than the TNT can handle up to 4096 by 4096.

quote:
Original post by Multiple Migs

Can they only be glued to a certain size primative?


Nope. But if you don''t want the texture to be filtered, then the primitive it is used on should be the same size as the texture (that''s a basic description, but you get the idea).

Resist Windows XP''s Invasive Production Activation Technology!
http://druidgames.cjb.net/

Share this post


Link to post
Share on other sites
How do you transfer an image from the framebuffer (currently displayed image) into a texture?

Is it possible to draw primatives (using glBegin(...)) straight into a texture?

Thanks for responding to all my questions!

Migs

Share this post


Link to post
Share on other sites
Render to the backbuffer, and use glReadPixels to dump the screen into a buffer, which may just happen to become a texture . That''s the only way I''ve seen it done, although the ARB is considering adding rendering straight to a texture in a future version of OpenGL (I read that in their meeting notes, so it isn''t certain to happen soon or at all).

Resist Windows XP''s Invasive Production Activation Technology!
http://druidgames.cjb.net/

Share this post


Link to post
Share on other sites
Note on above post by Null & Void:
I''m not saying I know of another way, but -
That will be slow.

-Mezz

Share this post


Link to post
Share on other sites
the fastest way to copy a piece of the screen into a texture is
glCopyTexSubImage(..)

a sidenote.
http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/002552.html

http://members.xoom.com/myBollux

Share this post


Link to post
Share on other sites
Hey everyone,

Thanks for all the replies! Now i''ve got another question. I am trying to draw an image into the auxillary buffer so that I do not have to redraw it everytime it is displayed to the screen. The documentation in the RedBook says this should work. But, it doesn''t seem to be working.

Here is the portion of code i''m having troubles with:

void __fastcall TFormMain::DrawObjects()
{
// the portion in this if is only done once
if(init)
{
glLoadIdentity();
glDrawBuffer(GL_AUX1);
glTranslatef(320, 240, 0);
glTranslatef(-320, -240, 0);
DrawCsmMap("vms2d.csm", 0); // a draw function of my own
init = false;
}
glReadBuffer(GL_AUX1);
glDrawBuffer(GL_BACK);
glCopyPixels(0, 0, 640, 480, GL_COLOR);
}

I know i''m a rookie and this code my be funny to some of you. But if anybody could send me in the right direction, I would greatly appreciate it.

P.S. I''m almost over the hump so I won''t have to ask too many more questions.

Mig

Share this post


Link to post
Share on other sites
have a look at the IIRC win_buffer_region extension demo my site. this is prolly more suitable for this

http://members.xoom.com/myBollux

Share this post


Link to post
Share on other sites