From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- .../x-cvsweb-markup&sortby=rev/index.html | 170 +++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 cvs/cvsweb.cgi/code/nel/doc/3d/3d_data.dxt?rev=1.1&content-type=text/x-cvsweb-markup&sortby=rev/index.html (limited to 'cvs/cvsweb.cgi/code/nel/doc/3d/3d_data.dxt?rev=1.1&content-type=text/x-cvsweb-markup&sortby=rev/index.html') diff --git a/cvs/cvsweb.cgi/code/nel/doc/3d/3d_data.dxt?rev=1.1&content-type=text/x-cvsweb-markup&sortby=rev/index.html b/cvs/cvsweb.cgi/code/nel/doc/3d/3d_data.dxt?rev=1.1&content-type=text/x-cvsweb-markup&sortby=rev/index.html new file mode 100644 index 00000000..7bd04e5d --- /dev/null +++ b/cvs/cvsweb.cgi/code/nel/doc/3d/3d_data.dxt?rev=1.1&content-type=text/x-cvsweb-markup&sortby=rev/index.html @@ -0,0 +1,170 @@ + + + +code/nel/doc/3d/3d_data.dxt - view - 1.1 + +
[BACK] Return to 3d_data.dxt + CVS log [TXT][DIR] Up to Nevrax / code / nel / doc / 3d

File: Nevrax / code / nel / doc / 3d / 3d_data.dxt (download)
+Revision 1.1, Tue Jan 9 13:19:38 2001 UTC (18 months, 2 weeks ago) by corvazier +
Branch: MAIN +
CVS Tags: proto_0_2, proto_0_1, nel_0_4, nel_0_3, nel_0_2, georges_v2, demo_0_1, HEAD
+no message
+
+

+/**
+\page 3d_data_howto How to deal with 3d data
+
+\author Cyril Corvazier
+
+\subsection 3d_data_overview Overall view
+
+3d data files in NeL are managed in a specific way.
+
+NeL doesn't import proprietary 3d file format like .3ds. NeL only deal with NeL binary files.
+NeL doesn't describe the NeL binary file format, it gives interface to import and export it.
+
+Those files are generated by serializing some classes. Building those data is easy.
+With the serial's version system, data can change and stay compatible with the futur version 
+of NeL.
+
+To get some NeL binary 3d files, you can:
+
+- Get some NeL files from your friend or from Nevrax. :)
+- Export some data with a specific plugin exporting NeL files.
+- Write a file converter from your format to NeL format.
+- Write a plugin for your 3d editor.
+
+\subsection mesh Build a simple mesh
+
+Ok, First you will need to build a simple mesh. A mesh is a class that handle one 3d object. 
+It contains the vertices, the primitives, and pointers on materials. The mesh class is NL3D::CMesh.
+
+The class NL3D::CMesh::CMeshBuild is used to build this mesh. Just fill it with appropriate values:
+
+- VertexFlags will received flags that describe vertices format like in CVertexBuffer. Following flags can be used
+        IDRV_VF_XYZ (x, y, z local value, must be present), IDRV_VF_NORMAL (normal, should be present for lighted material),
+        IDRV_VF_COLOR (vertex diffuse color), IDRV_VF_SPECULAR (vertex specular color), IDRV_VF_UV[IDRV_VF_MAXSTAGES] 
+        (flags for each UV channel used, max IDRV_VF_MAXSTAGES UV channels), IDRV_VF_W[IDRV_VF_MAXW] (flags for each
+        weighting channel used). Some exemple:
+        - IDRV_VF_XYZ|IDRV_VF_NORMAL, simple lighted vertex
+        - IDRV_VF_XYZ|IDRV_VF_NORMAL|IDRV_VF_UV[0]|IDRV_VF_UV[1], simple lighted vertex with two mapping channels
+        - IDRV_VF_XYZ|IDRV_VF_NORMAL|IDRV_VF_W[0]|IDRV_VF_W[1]|IDRV_VF_W[2]|IDRV_VF_W[3], simple lighted vertex with 4 weights for skinning matrix.
+- Materials is an array of materials. Resize it and fill it with your materials data. See material_howto for more information.
+- Vertices is the vertex array. Only local x, y and z coordinates are stored here. Resize it and fill it.
+- Faces is the triangle array. Each triangle is composed by 3 NL3D::CMesh::CCorner and a material Id. The corner must be fill like this:
+        - Vertex must receive the vertex id used at this corner.
+        - Normal must receive the local normalized normal at this corner.
+        - Uvs must receive the UV values for each mapping channels defined in VertexFlags.
+        - Color must receive the diffuse color if IDRV_VF_COLOR is defined in VertexFlags.
+        - Specular must receive the specular color if IDRV_VF_COLOR is defined in VertexFlags.
+        - Weights must receive the weight values for each weighting channels defined in VertexFlags.
+
+\code
+        // Let's assume that those namespaces are used: NL3D, NLMISC
+
+        // My building struct
+        CMesh::CMeshBuild buildStruct;
+
+        // Filling the struct..
+        ...
+
+        // Create a CMesh
+        CMesh myMesh;
+
+        // Build the mesh
+        myMesh.build (buildStruct);
+
+        // Create a mesh for export
+        CShapeStream streamableMesh (&myMesh)
+
+        // Ok, ready to export
+
+\endcode
+
+You have normals, colors and uvs per vertex per triangle.
+Once you have filled all those values, call NL3D::CMesh::build() on the mesh. 
+NL3D::CMesh::build() will optimize your corners by merging the same one.
+
+To simplify the serialization of a shape, use the class NL3D::CShapeStream construct with your shape pointer and serialize it.
+This class will serial a valid .shape file with header and polymorphic serialization of the shape, materials and textures.
+Here is the code of NL3D::CShapeStream::serial():
+
+\code
+void CShapeStream::serial(NLMISC::IStream &f) throw(NLMISC::EStream)
+{
+        // First, serial an header or checking if it is correct
+        f.serialCheck ((uint32)'PAHS');
+
+        // Then, serial the shape
+        f.serialPolyPtr (_Shape);
+
+        // Ok, it's done
+}
+\endcode
+
+Your mesh is ready to export.
+
+\subsection zone Build a landscape zone
+
+It's coming..
+
+\subsection serial Serial a NeL class
+
+Now you have build your data, you must know how to serial a NeL class. Let's assume that you want to read a landscape zone from a file:
+
+\code
+        // Let's assume that those namespaces are used: NL3D, NLMISC
+
+        // Your object to load into
+        CZone                        zone;
+
+        // Create an input file stream
+        CIFile                        fileIn;
+
+        // Open your file for writing
+        if (fileIn.open ("myZoneFile.zone"))
+        {
+                // Catch some error
+                try
+                {
+                        // Read your object
+                        zone.serial (fileIn);
+                }
+                catch (CException& except)
+                {
+                        // Handle errors. File truncated, bad version, etc...
+                }
+        }
+\endcode
+
+Then how to write a shape in a file ? Easy too..
+
+\code
+        // Let's assume that those namespaces are used: NL3D, NLMISC
+
+        // Your shape to write
+        CShapeStream        shape;
+
+        // Create an output file stream
+        COFile                        fileOut;
+
+        // Open your file for writing
+        if (fileOut.open ("myExportedFile.shape"))
+        {
+                // Catch some error
+                try
+                {
+                        // Write your object
+                        shape.serial (fileOut);
+                }
+                catch (CException& except)
+                {
+                        // Handle error. Disk full, etc...
+                }
+        }
+\endcode
+
+
+
+*/
+
\ No newline at end of file -- cgit v1.2.1