|
|
1.1 root 1:
2: /*
3: PointMesh.m
4:
5: A PointMesh takes an array of points in three dimensional space and renders
6: them as surface in space space using a Renderman bilinear patch mesh.
7:
8: You may freely copy, distribute, and reuse the code in this example.
9: NeXT disclaims any warranty of any kind, expressed or implied, as to its
10: fitness for any particular use.
11: */
12:
13: #import "Graph.h"
14:
15: @implementation PointMesh
16:
17: - init {
18: self = [super init];
19: color = NX_COLORWHITE;
20: return self;
21: }
22:
23: - free {
24: free(points);
25: return [super free];
26: }
27:
28: /*
29: * This copies ther given points into a 2D array that is formatted correctly
30: * for the RiPatchMesh() call we use to render the patch (below).
31: */
32: - setPointsX:(float *)x y:(float *)y z:(float *)z
33: minX:(float)minX minY:(float)minY minZ:(float)minZ
34: maxX:(float)maxX maxY:(float)maxY maxZ:(float)maxZ
35: numU:(int)numU numV:(int)numV {
36: int i;
37: int totalPoints = numU * numV;
38:
39: uCount = numU;
40: vCount = numV;
41: free(points);
42: points = NXZoneMalloc([self zone], totalPoints * sizeof(RtPoint));
43:
44: for (i = 0; i < totalPoints; i++) {
45: points[i][0] = x[i];
46: points[i][1] = y[i];
47: points[i][2] = z[i];
48: }
49: return self;
50: }
51:
52: /*
53: * This method is called whenever the shape needs to render itself (its
54: * analogous to View's drawSelf:: method). The patch renders itself by
55: * setting the surface type and the color, and then emitting one big bilinear
56: * patch mesh containing all our data points.
57: */
58: - renderSelf:(RtToken)context {
59: static RtColor rgbColor;
60:
61: RiSurface("plastic", RI_NULL);
62: NXConvertColorToRGB(color, &rgbColor[0], &rgbColor[1], &rgbColor[2]);
63: RiColor(rgbColor);
64: RiPatchMesh(RI_BILINEAR, uCount, RI_NONPERIODIC, vCount, RI_NONPERIODIC, RI_P, points, RI_NULL);
65: return self;
66: }
67:
68: - setColor:(NXColor)newColor {
69: color = newColor;
70: return self;
71: }
72:
73: - (NXColor)color {
74: return color;
75: }
76:
77: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.