Skip to content

Commit

Permalink
fix(geometry): fix error multi geometry (#133)
Browse files Browse the repository at this point in the history
fix error multi geometry
fix sub geometry can't be render success.
fix normal of planeZ
add closed cylinder
add closed cylinder model into scene.
  • Loading branch information
hellmor committed May 15, 2023
1 parent 93d8a1c commit 20f649b
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 16 deletions.
19 changes: 17 additions & 2 deletions samples/geometry/Sample_InternalGeometry.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { GUIHelp } from "@orillusion/debug/GUIHelp";
import { Engine3D, View3D, Scene3D, CameraUtil, AtmosphericComponent, webGPUContext, HoverCameraController, Object3D, DirectLight, KelvinUtil, PlaneGeometry, VertexAttributeName, LitMaterial, MeshRenderer, BoxGeometry, SphereGeometry, CylinderGeometry, TorusGeometry } from "@orillusion/core";
import { Engine3D, View3D, Scene3D, CameraUtil, AtmosphericComponent, webGPUContext, HoverCameraController, Object3D, DirectLight, KelvinUtil, PlaneGeometry, VertexAttributeName, LitMaterial, MeshRenderer, BoxGeometry, SphereGeometry, CylinderGeometry, TorusGeometry, Vector2, Color } from "@orillusion/core";
import { GUIUtil } from "@samples/utils/GUIUtil";

// An sample of display internal geometry
Expand Down Expand Up @@ -71,7 +71,7 @@ class Sample_InternalGeometry {
scene.addChild(box);
}

// add a cylinder closed
// add a cylinder opened
{
let box = new Object3D();
let meshRenderer = box.addComponent(MeshRenderer);
Expand All @@ -82,6 +82,21 @@ class Sample_InternalGeometry {
scene.addChild(box);
}

// add a cylinder closed
{
let box = new Object3D();
let meshRenderer = box.addComponent(MeshRenderer);
meshRenderer.geometry = new CylinderGeometry(5, 10, 20, 50, 20);
let topMaterial = new LitMaterial();
topMaterial.baseColor = new Color(1, 0, 0, 1);
meshRenderer.materials = [material, topMaterial, topMaterial];

box.y = 20;
box.x = 50;
box.z = 50;
scene.addChild(box);
}


// add a torus
{
Expand Down
34 changes: 21 additions & 13 deletions src/components/renderer/RenderNode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -243,18 +243,21 @@ export class RenderNode extends ComponentBase {

public renderPass(view: View3D, passType: RendererType, renderContext: RenderContext) {
let renderNode = this;
let worldMatrix = renderNode.transform._worldMatrix;
for (let i = 0; i < renderNode.materials.length; i++) {
const material = renderNode.materials[i];
let passes = material.renderPasses.get(passType);

if (!passes || passes.length == 0) continue;
if (!passes || passes.length == 0)
continue;

GPUContext.bindGeometryBuffer(renderContext.encoder, renderNode._geometry);
let worldMatrix = renderNode.transform._worldMatrix;
for (let j = 0; j < passes.length; j++) {
if (!passes || passes.length == 0) continue;
if (!passes || passes.length == 0)
continue;
let matPass = passes[j];
if (!matPass.enable) continue;
if (!matPass.enable)
continue;

// for (let j = passes.length > 1 ? 1 : 0 ; j < passes.length; j++) {
const renderShader = matPass.renderShader;
Expand Down Expand Up @@ -290,29 +293,34 @@ export class RenderNode extends ComponentBase {
* @returns
*/
public renderPass2(view: View3D, passType: RendererType, rendererPassState: RendererPassState, clusterLightingBuffer: ClusterLightingBuffer, encoder: GPURenderPassEncoder, useBundle: boolean = false) {
if (!this.enable) return;
if (!this.enable)
return;
this.nodeUpdate(view, passType, rendererPassState, clusterLightingBuffer);

let node = this;
let worldMatrix = node.object3D.transform._worldMatrix;
for (let i = 0; i < this.materials.length; i++) {
const material = this.materials[i];
let passes = material.renderPasses.get(passType);
if (!passes || passes.length == 0) return;
let matPass = passes[i];
if (!matPass.enable) continue;
if (!passes || passes.length == 0)
return;

let worldMatrix = node.object3D.transform._worldMatrix;
if (this.drawType == 2) {
for (let j = 0; j < passes.length; j++) {
let renderShader = passes[j].renderShader;
GPUContext.bindPipeline(encoder, renderShader);
let matPass = passes[j];
if (!matPass.enable)
continue;

GPUContext.bindPipeline(encoder, matPass.renderShader);
GPUContext.draw(encoder, 6, 1, 0, worldMatrix.index);
}
} else {
GPUContext.bindGeometryBuffer(encoder, node._geometry);
for (let j = 0; j < passes.length; j++) {
let renderShader = passes[j].renderShader;
GPUContext.bindPipeline(encoder, renderShader);
let matPass = passes[j];
if (!matPass.enable)
continue;
GPUContext.bindPipeline(encoder, matPass.renderShader);
let subGeometries = node._geometry.subGeometries;
const subGeometry = subGeometries[i];
let lodInfos = subGeometry.lodLevels;
Expand Down
2 changes: 1 addition & 1 deletion src/shape/PlaneGeometry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ export class PlaneGeometry extends GeometryBase {

normal_arr[indexN++] = 0;
normal_arr[indexN++] = 0;
normal_arr[indexN++] = -1;
normal_arr[indexN++] = 1;
break;
case Vector3.X_AXIS:
position_arr[indexP++] = 0;
Expand Down

0 comments on commit 20f649b

Please sign in to comment.