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!


Old-School 3D Wireframe Modelling Tool

  • You cannot reply to this topic
19 replies to this topic

#1 SparkyNZ   Members   -  Reputation: 141

Like
0Likes
Like

Posted 28 July 2015 - 04:14 PM

Hi, I would like to make some simple 3D wireframe models - such as Elite spaceships, Mercenary buildings, Battlezone etc. I'm talking 80-90's retro wireframe modles here.

 

Rather than writing my own, I'd like to find something out there which will let me create relatively simple models and export vertex and line information to a simple file format or even C arrays etc.

 

I don't really want to use something as complicated as Blender if I can avoid it.

 

Can somebody recommend such a tool?

 

Thanks.



Sponsor:

#2 slicer4ever   Crossbones+   -  Reputation: 4977

Like
0Likes
Like

Posted 28 July 2015 - 04:48 PM

Hi, I would like to make some simple 3D wireframe models - such as Elite spaceships, Mercenary buildings, Battlezone etc. I'm talking 80-90's retro wireframe modles here.
 
Rather than writing my own, I'd like to find something out there which will let me create relatively simple models and export vertex and line information to a simple file format or even C arrays etc.
 
I don't really want to use something as complicated as Blender if I can avoid it.
 
Can somebody recommend such a tool?
 
Thanks.


why can't you simply set draw mode to wireframe?
(OpenGL: glPolygonMode, DX11: rastdescriptor.fillmode)
Check out https://www.facebook.com/LiquidGames for some great games made by me on the Playstation Mobile market.

#3 SparkyNZ   Members   -  Reputation: 141

Like
0Likes
Like

Posted 28 July 2015 - 04:51 PM


why can't you simply set draw mode to wireframe?

 

..and use Blender you mean?



#4 Lactose!   GDNet+   -  Reputation: 5665

Like
1Likes
Like

Posted 28 July 2015 - 04:51 PM


why can't you simply set draw mode to wireframe?
(OpenGL: glPolygonMode, DX11: rastdescriptor.fillmode)

Create/model, not draw.


Project journal, check it out!

http://www.gamedev.net/blog/1830-lactoses-journal/

 

Hello to all my stalkers.


#5 slicer4ever   Crossbones+   -  Reputation: 4977

Like
2Likes
Like

Posted 28 July 2015 - 04:55 PM

why can't you simply set draw mode to wireframe?

 
..and use Blender you mean?

 
yes.

why can't you simply set draw mode to wireframe?
(OpenGL: glPolygonMode, DX11: rastdescriptor.fillmode)

Create/model, not draw.


I assume his end goal is to draw those models like they were wireframed. instead of adding the overhead of generating a bunch of redundant vertices for his model in line mode, to instead just use built in api features for drawing models as wiremeshs.
if this is not his end goal, then disregard my comment.
Check out https://www.facebook.com/LiquidGames for some great games made by me on the Playstation Mobile market.

#6 Lactose!   GDNet+   -  Reputation: 5665

Like
1Likes
Like

Posted 28 July 2015 - 04:56 PM


I assume his end goal is to draw those models like they were wireframed. instead of adding the overhead of generating a bunch of redundant vertices for his model in line mode, to instead just use built in api features for drawing models as wiremeshs.
if this is not his end goal, then disregard my comment.

Fair point :)

 

Also, check PM :P


Project journal, check it out!

http://www.gamedev.net/blog/1830-lactoses-journal/

 

Hello to all my stalkers.


#7 SparkyNZ   Members   -  Reputation: 141

Like
0Likes
Like

Posted 28 July 2015 - 05:09 PM


I assume his end goal is to draw those models like they were wireframed. instead of adding the overhead of generating a bunch of redundant vertices for his model in line mode, to instead just use built in api features for drawing models as wiremeshs.
if this is not his end goal, then disregard my comment.

 

Thanks. Yeah.. I haven't decided yet to be honest. I realise I can do wireframe in OpenGL and load objects via ASSIMP etc but I haven't decided whether to do it this way or draw lines. I'd like to do hidden line removal so it probably would make more sense I guess. At the moment I'm just wanting to create simple objects that I can potentially load back into old Amiga/Atari ST games in whatever format they're stored currently.. I have a number of plans and side projects. :-)



#8 Goliath Forge   Members   -  Reputation: 943

Like
1Likes
Like

Posted 28 July 2015 - 10:47 PM

"Can somebody recommend such a tool?"

 

[ Anim8or ] is pretty old school, clean and simple (exports to a c file format) 

may need to be ran in WinXP compatibility mode.

From here you could easily write a conversion tool(macro at that) to generate custom line indices from the standard (triangle/quad) face list.

 

 

I understand that you're not looking for a marginally relative modern concept explanation or a history lesson.

You're MOD-ing an old game and would probably like to keep the current content format.

Sounds like fun. Maybe after you get that out of your system, you might shoot for something for the rest of us without Amiga's smile.png

Personally, if I were you, I'd go with Blender and script up my own exporter.

You still will have to custom re-write to your index format that your existing engine expects to see.

 

If you want to be 'professional' hard core, do it in max or maya. 

Although, the Blender Army groweth. 


Edited by Goliath Forge, 30 July 2015 - 01:29 PM.


#9 SparkyNZ   Members   -  Reputation: 141

Like
0Likes
Like

Posted 29 July 2015 - 02:00 AM


[ Anim8or ] is pretty old school, clean and simple (exports to a c file format)

your artwork can't get much more secure than that smile.png

 

Thanks Goliath - I just gave this a try. It worked OK on Win8 in XP compatability mode. The only problem is that the C file seems to contain way more than what I was after. I tried adding a cube primitive and expected to see 8 vertices somewhere in the C output but it was full of heaps of mesh information. All I want are vertice coordinates and then a table of which vertices are used to make an edge if you know what I mean. smile.png I should check the formats that Blender does produce - I know it exports quite a few and there may be a few plugins too I guess? Specifcally what I am looking for is vertices and edge information - I just had a look at an example OBJ file and they are similar to the anim8or C files - textures/faces are described with vertices rather than edges.


Edited by SparkyNZ, 29 July 2015 - 02:05 AM.


#10 frob   Moderators   -  Reputation: 30465

Like
0Likes
Like

Posted 29 July 2015 - 09:04 PM

The only problem is that the C file seems to contain way more than what I was after. I tried adding a cube primitive and expected to see 8 vertices somewhere in the C output but it was full of heaps of mesh information. All I want are vertice coordinates and then a table of which vertices are used to make an edge if you know what I mean. ... Specifcally what I am looking for is vertices and edge information - I just had a look at an example OBJ file and they are similar to the anim8or C files - textures/faces are described with vertices rather than edges.


So that's different from what you originally asked.

At first you were asking for a tool to make meshes and a simple file format. Now it looks like you are trying to find a point cloud in a file format, but in a format that looks like a C array. No idea why.

If you're just looking for points, it seems like any modern art tool could work, just create a simple box and export the collada file. But you mentioned wanting it in the format of a C array, or as "C output", for some reason.

Can you describe more of what, and WHY, you are looking for this? Perhaps the reason that a Collada file or similar wouldn't work, perhaps why you're looking to load data as code, or what the thoughts are behind it? Really, can you provide information so we can figure out something that might fit your needs?

Usually data like this is handled as data. And rendering data is often handled as vertex arrays since that's what the graphics APIs tend to work with. What are you trying to accomplish that is different?

Check out my book, Game Development with Unity, aimed at beginners who want to build fun games fast.

Also check out my personal website at bryanwagstaff.com, where I write about assorted stuff.


#11 SparkyNZ   Members   -  Reputation: 141

Like
0Likes
Like

Posted 29 July 2015 - 10:25 PM


So that's different from what you originally asked.

 

I disagree. I said: "I'd like to find something out there which will let me create relatively simple models and export vertex and line information to a simple file format or even C arrays etc."

 

If you refer to the below link, there are 2 tables describing exactly what I am talking about.

 

https://en.wikipedia.org/wiki/Wire-frame_model

 

The game I'm fiddling with stored models in the same method as described in the link above. It stores 3D vertices coordinates and then lists the vertex pairs which form each edge.

 

If there aren't any tools around capable of doing this, then that's OK - I'll write my own. The other thing I considered this morning is deriving this information from face vertex information in an OBJ or similar file - that should be straightforward for me to do because its just a matter of factoring out a lot of the vertex chain information.



#12 frob   Moderators   -  Reputation: 30465

Like
0Likes
Like

Posted 30 July 2015 - 01:16 AM

I think we all know what wireframe models are. What we don't know is the actual data you are trying to generate, or why.

Knowing that would help come up with answers. Instead all we've gotten is that various tools and formats don't work. What are you looking for? If we know what it is, and why it is, then we can help come up with either the exact thing or a working alternative.

For example, saying you want minimal data probably means you are going to do some simple modifications to it, but you don't say what. Saying you want it as a C array as source code probably means you want it in a program so you can manipulate it, but hard-coding data like that is rarely done, there are other, usually better approaches.

You write that you want tables. Tables are a visual thing, not a data thing. Probably the closest to that is comma separated values, but you aren't asking for that.

What is your real question, what is the real problem you are trying to solve

Check out my book, Game Development with Unity, aimed at beginners who want to build fun games fast.

Also check out my personal website at bryanwagstaff.com, where I write about assorted stuff.


#13 SparkyNZ   Members   -  Reputation: 141

Like
0Likes
Like

Posted 30 July 2015 - 02:25 AM


For example, saying you want minimal data probably means you are going to do some simple modifications to it, but you don't say what. Saying you want it as a C array as source code probably means you want it in a program so you can manipulate it, but hard-coding data like that is rarely done, there are other, usually better approaches.

 

1. Ideally I would like a simple program (with side, top, front and perspective views where I can draw wireframe models - perhaps using primitives such as cubes, pyramids, lines and be able to move the vertices around in 3D coordinate space

2. If I had a pyramid for example, I would like it to appear as float arrays similar to this:

float vertPyramidXYZ[] =
{
0.0, 0.0, 1.0,
-0.5, 0.5, 0.0,
0.5, 0.5, 0.0,
0.5, -0.5, 0.0,
-0.5, -0.5, 0.0,
};

int linesPyramid[] =
{
0, 1,
0, 2,
0, 3,
0, 4,
1, 2,
2, 3,
3, 4,
4, 1,
};

This would allow me to export my own objects back into an Amiga game such as Mercenary written back in the late 1980's. Mercenary in particular was written in 680x0 assembly language and my language of choice for the past 20 years has been C. So when I want to manipulate bytes, I use C. Other modern day formats are far too complex for this purpose without converting the data contained within them.

 

Mercenary draws its objects by drawing lines. It iterates through the list of lines getting source and destination vertex indices. Those indices are used to look up the 3D coordinates from an array such as my vertPyramidXYZ example and then it draws a line in 3D space between the 2 vertices.



#14 frob   Moderators   -  Reputation: 30465

Like
0Likes
Like

Posted 30 July 2015 - 10:37 AM

1. Ideally I would like a simple program (with side, top, front and perspective views where I can draw wireframe models - perhaps using primitives such as cubes, pyramids, lines and be able to move the vertices around in 3D coordinate space

 
For the first part, there are many programs for manipulating them. Blender, Maya, 3D Studio, and others can manipulate meshes.  
 
From your description you generated a more complicated mesh than you needed. Subdividing models like a cube can be a very good thing on modern systems that operate on a per-vertex basis, you need more of them for your shaders and effects to appear smooth.  Nothing prevents you (with your artist hat on) from reducing the model down, or generating a more simple model in the first place.
 
If you know what you are doing, it only takes a second or two to build the low-poly models that you describe in the modern 3D modeling programs. You just need to give it the right parameters.
 

2. If I had a pyramid for example, I would like it to appear as float arrays similar to this:

Not even the old tools generated output like that.  
 
Even going back to the 1970s in the days of Evans and Sutherland's early 3D tools being everywhere, graphics tools still dealt with data file rather than trying to make it part of the executable like that.

So you'll need to build an exporter that dumps it in C format, or hunt around on the internet for someone who has written them, but I doubt there are many. Data files for graphics are generally meant to be loaded as data.

After you've got your data file exporter, the content will almost certainly not look like your example. Unless you are hand-coding every piece of data they probably won't be all ordered perfectly in a human-preferred sort order. You may happen to get lucky with your polygon ordering and your export ordering, or export immediately after creation and happen to have the model generated in your preferred way, but probably not. For just those 8, you've got 8 factorial (over 40,000) different ordering possibilities, so almost certainly they won't fall into that nice simple human-sorted ordering.
 

Mercenary in particular was written in 680x0 assembly language

 
There were games in that era where every CPU instruction was chosen by hand, where every data point was hand crafted, where every byte was accounted for by the game programmer, and the programmer knew exactly what every instruction in his game was and why it was there.  If that is the type of games you want to build, it will require a far more work and learning.

I usually wouldn't recommend that route except for a learning experience because you are determined that want to learn it. The route is difficult and was abandoned for many good reasons, including the high costs of human effort, of specializations, of difficulty and time.

You can certainly do it, but that's not something you will get as output from any mainstream tool. You'll need to craft it, or at least parts of it like exporters, yourself. Artisan games generally require artisans to make.

Check out my book, Game Development with Unity, aimed at beginners who want to build fun games fast.

Also check out my personal website at bryanwagstaff.com, where I write about assorted stuff.


#15 xoxos   Members   -  Reputation: 196

Like
1Likes
Like

Posted 30 July 2015 - 05:49 PM

wings3d. free, minimal, simple to use.


neither a follower nor a leader behttp://www.xoxos.net

#16 ikarth   Members   -  Reputation: 861

Like
2Likes
Like

Posted Yesterday, 06:34 AM

The way they did it back in the really, really old days was to code it by hand on graph paper. Elite, for example. Though even then it was a separate data file created via custom-written BASIC programs or entered directly into a hex editor!

 

If you really want to do it by hand, you can speed the process along by modeling in blender and then grabbing the list of vertex positions: http://blenderscripting.blogspot.com/2011/05/blender-25-python-printing-vertex.html



#17 SparkyNZ   Members   -  Reputation: 141

Like
0Likes
Like

Posted Yesterday, 11:50 PM


wings3d. free, minimal, simple to use.

 

And open source too! Thanks for that.

 


If you really want to do it by hand, you can speed the process along by modeling in blender and then grabbing the list of vertex positions: http://blenderscripting.blogspot.com/2011/05/blender-25-python-printing-vertex.html

 

Thanks again - plenty of options.



#18 Aardvajk   Crossbones+   -  Reputation: 9017

Like
0Likes
Like

Posted Today, 12:47 AM

Is Milkshape still available. I cut my teeth on that.

You'd still probably be better investing the time in Blender as you are bound to want more advanced features as you develop.

Been thinking about preparing my modeller for release lately. Maybe I'll do that.

#19 SparkyNZ   Members   -  Reputation: 141

Like
0Likes
Like

Posted Today, 01:34 AM


You'd still probably be better investing the time in Blender as you are bound to want more advanced features as you develop.

 

Definitely. I did spend quite a bit of time with some Blender training vids on Youtube but it was taking a while. I had pinned it for a later date to return to thinking I wouldn't need it during my retro-revisitation but..



#20 MarkS   GDNet+   -  Reputation: 1971

Like
0Likes
Like

Posted Today, 03:13 AM

Use Blender and output as an .obj file.
 
Here is a cube exported from Blender:
 

o Cube
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -0.999999
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -0.000000 -0.000000 1.000000
vn -1.000000 -0.000000 -0.000000
vn 0.000000 0.000000 -1.000000
s off
f 1//1 2//1 3//1 4//1
f 5//2 8//2 7//2 6//2
f 1//3 5//3 6//3 2//3
f 2//4 6//4 7//4 3//4
f 3//5 7//5 8//5 4//5
f 5//6 1//6 4//6 8//6

Ignore the "o cube" and "s off". They don't matter. The lines starting with 'v' are the vertex coordinates. The lines starting with 'vn' are face normals and are optional for export. The lines starting with 'f' are key. The faces are indices starting at one instead of zero (important!). The face format is: vertex index/uv index/normal index. If a slot is empty, as it is here with the uv indices, it means the data wasn't exported. The number of index groups per face is the number of edges per face.

To do what you want, you would parse the file and construct your line array as so:

Face '1':

int lines_array[] = {
0, Face 1, index 1
1,
2,
3
};

Add face 2:

int lines_array[] = {
0, //Face 1, index 1 (OBJ indices start at 1 instead of 0)
1,
2,
3,
4, //Face 2, index 5
7,
6,
5
};

And so on. This has the benefit of not forcing your object to be hard coded. I have an OBJ file importer I can give, if it would help.

I'm writing this at 4 AM, so I might come across a little unclear. Sorry about that.


Edited by MarkS, Today, 03:22 AM.






PARTNERS