@carbonenginejs/runtime 0.1.0-alpha.1 → 0.1.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/global/model/CjsModel.js +3 -1
- package/dist/global/model/CjsModel.js.map +1 -1
- package/dist/global/model/document/CjsDocumentHydrator.js +5 -1
- package/dist/global/model/document/CjsDocumentHydrator.js.map +1 -1
- package/dist/global/schema/CjsSchema.js +100 -2
- package/dist/global/schema/CjsSchema.js.map +1 -1
- package/dist/global/schema/hydration.js +16 -0
- package/dist/global/schema/hydration.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsResMan.js +177 -4
- package/dist/resource/CjsResMan.js.map +1 -1
- package/dist/resource/format/CjsBlueReader.js +8 -1
- package/dist/resource/format/CjsBlueReader.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +23 -5
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +12 -3
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/resource/index.js +2 -0
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/texture/SolidColorTextureConstructor.js +46 -0
- package/dist/resource/texture/SolidColorTextureConstructor.js.map +1 -0
- package/dist/resource/texture/TriTextureRes.js +43 -0
- package/dist/resource/texture/TriTextureRes.js.map +1 -1
- package/dist/resource/texture/index.js +2 -0
- package/dist/resource/texture/index.js.map +1 -1
- package/dist/resource/texture/solidColorTexture.js +111 -0
- package/dist/resource/texture/solidColorTexture.js.map +1 -0
- package/dist/trinity/eve/attachment/decal/EveSpaceObjectDecal.js +19 -8
- package/dist/trinity/eve/attachment/decal/EveSpaceObjectDecal.js.map +1 -1
- package/dist/trinity/eve/child/EveChildMesh.js +17 -3
- package/dist/trinity/eve/child/EveChildMesh.js.map +1 -1
- package/dist/trinity/eve/locator/EveLocatorSets.js +12 -3
- package/dist/trinity/eve/locator/EveLocatorSets.js.map +1 -1
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js +15 -2
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js.map +1 -1
- package/dist/trinity/eve/spaceObject/IEveSpaceObject2ParentData.js +44 -52
- package/dist/trinity/eve/spaceObject/IEveSpaceObject2ParentData.js.map +1 -1
- package/docs/resource/concepts/resource-lifecycle.md +10 -8
- package/docs/resource/formats/geometry-interchange.md +50 -0
- package/docs/resource/formats/webgl/decl-io.md +241 -397
- package/docs/resource/formats/webgl/memory-structured.md +91 -128
- package/docs/resource/formats/webgl/texture-sample.md +306 -469
- package/docs/resource/formats/webgpu/reference/wgsl-compatibility.md +54 -85
- package/docs/resource/reference/classes/texture.md +11 -1
- package/docs/resource/reference/motherlode-cache.md +24 -11
- package/docs/resource/reference/queues.md +23 -1
- package/docs/trinityal/reference/classes/dropped.md +11 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { identity as _identity, applyDecs2311 as _applyDecs2311 } from '../../..
|
|
|
2
2
|
import { mat4 } from '#math/mat4';
|
|
3
3
|
import { vec3 } from '#math/vec3';
|
|
4
4
|
import { CjsModel } from '#model';
|
|
5
|
-
import { io, type, carbon, impl } from '#schema';
|
|
5
|
+
import { io, type, carbon, impl, CjsSchema } from '#schema';
|
|
6
6
|
import { MatrixCopyFrom3x4 } from '../lights/lightConversion.js';
|
|
7
7
|
import { Locator as _Locator } from './Locator.js';
|
|
8
8
|
|
|
@@ -85,7 +85,10 @@ new class extends _identity {
|
|
|
85
85
|
*/
|
|
86
86
|
Append(locators) {
|
|
87
87
|
for (const locator of locators) {
|
|
88
|
-
|
|
88
|
+
// A value copy, live or plain: from() takes values only.
|
|
89
|
+
const copy = new _Locator();
|
|
90
|
+
CjsSchema.copy(copy, locator);
|
|
91
|
+
this.locators.push(copy);
|
|
89
92
|
}
|
|
90
93
|
}
|
|
91
94
|
|
|
@@ -118,7 +121,13 @@ new class extends _identity {
|
|
|
118
121
|
*/
|
|
119
122
|
Set(name, locators) {
|
|
120
123
|
this.SetName(name);
|
|
121
|
-
|
|
124
|
+
// A value copy of each locator, live or plain - Carbon copies the vector by
|
|
125
|
+
// value. from() takes values only, so a live Locator is copied explicitly.
|
|
126
|
+
this.locators = locators.map(locator => {
|
|
127
|
+
const copy = new _Locator();
|
|
128
|
+
CjsSchema.copy(copy, locator);
|
|
129
|
+
return copy;
|
|
130
|
+
});
|
|
122
131
|
}
|
|
123
132
|
|
|
124
133
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EveLocatorSets.js","sources":["../../../../../src/trinity/eve/locator/EveLocatorSets.js"],"sourcesContent":["// Source: trinity/trinity/Eve/SpaceObject/Utils/EveLocatorSets.h\r\n// Source: trinity/trinity/Eve/SpaceObject/Utils/EveLocatorSets.cpp\r\nimport { mat4 } from \"#math/mat4\";\r\nimport { vec3 } from \"#math/vec3\";\r\nimport { CjsModel } from \"#model\";\r\nimport { carbon, impl, io, type } from \"#schema\";\r\nimport { MatrixCopyFrom3x4 } from \"../lights/lightConversion.js\";\r\nimport { Locator } from \"./Locator.js\";\r\n\r\nconst UNIT_Y = vec3.fromValues(0, 1, 0);\r\nconst POSE_BONE_SCRATCH = mat4.create();\r\n\r\n/**\r\n * Resolves a locator to its posed position and direction, transformed by the\r\n * animation updater's mesh bone when the locator is bone-attached.\r\n *\r\n * Carbon `EveGetLocatorPose` (EveLocatorSets.cpp:11-27). The direction is +Y\r\n * rotated by the authored quaternion. Carbon assumes bone 0 is unanimated for\r\n * performance, so only `boneIndex > 0` applies a bone matrix, and the\r\n * direction is deliberately NOT normalized here - the merged-damage caller in\r\n * EveSpaceObject2 normalizes after its own transform, and other callers take\r\n * the raw basis-transformed value.\r\n *\r\n * @param {Float32Array} outPosition - receives the object-space position\r\n * @param {Float32Array} outDirection - receives the unnormalized direction\r\n * @param {Object|null} animationUpdater - Tr2GrannyAnimation or null\r\n * @param {Object} locator - a Locator record\r\n */\r\nexport function EveGetLocatorPose(outPosition, outDirection, animationUpdater, locator)\r\n{\r\n vec3.copy(outPosition, locator.position);\r\n vec3.transformQuat(outDirection, UNIT_Y, locator.direction);\r\n\r\n if (locator.boneIndex > 0 && animationUpdater && animationUpdater.IsInitialized() &&\r\n locator.boneIndex < animationUpdater.GetMeshBoneCount())\r\n {\r\n const bones = animationUpdater.GetMeshBoneMatrixList();\r\n // Carbon leaves the outputs caller-uninitialized when the palette is\r\n // absent; CarbonEngineJS keeps the unskinned values instead.\r\n if (!bones || (locator.boneIndex + 1) * 12 > bones.length) return;\r\n MatrixCopyFrom3x4(POSE_BONE_SCRATCH, bones, locator.boneIndex);\r\n vec3.transformMat4(outPosition, locator.position, POSE_BONE_SCRATCH);\r\n const [ x, y, z ] = outDirection;\r\n outDirection[0] = POSE_BONE_SCRATCH[0] * x + POSE_BONE_SCRATCH[4] * y + POSE_BONE_SCRATCH[8] * z;\r\n outDirection[1] = POSE_BONE_SCRATCH[1] * x + POSE_BONE_SCRATCH[5] * y + POSE_BONE_SCRATCH[9] * z;\r\n outDirection[2] = POSE_BONE_SCRATCH[2] * x + POSE_BONE_SCRATCH[6] * y + POSE_BONE_SCRATCH[10] * z;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Named group of locators that a space object publishes for turrets, effects and\r\n * distributions to attach to.\r\n */\r\n@type.define({\r\n className: \"EveLocatorSets\",\r\n family: \"eve/utils\"\r\n})\r\nexport class EveLocatorSets extends CjsModel\r\n{\r\n @io.persist\r\n @type.list(\"Locator\")\r\n locators = [];\r\n\r\n @io.persist\r\n @type.string\r\n name = \"\";\r\n\r\n /**\r\n * Shifts the position of every locator in the set by an offset, doing nothing\r\n * for a zero offset.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n Translate(offset)\r\n {\r\n if (EveLocatorSets.#lengthSq(offset) === 0)\r\n {\r\n return;\r\n }\r\n for (const locator of this.locators)\r\n {\r\n vec3.add(locator.position, locator.position, offset);\r\n }\r\n }\r\n\r\n /**\r\n * Appends copies of the given locators, so the set never aliases the caller's\r\n * records.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n Append(locators)\r\n {\r\n for (const locator of locators)\r\n {\r\n this.locators.push(Locator.from(locator));\r\n }\r\n }\r\n\r\n /**\r\n * Reports whether the set carries exactly this name; set lookups are an exact\r\n * string match.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n HasName(name)\r\n {\r\n return this.name === String(name);\r\n }\r\n\r\n /** Returns the set's live locator list, not a copy. */\r\n @carbon.method\r\n @impl.implemented\r\n GetLocators()\r\n {\r\n return this.locators;\r\n }\r\n\r\n /** Returns the name callers look this set up by. */\r\n @carbon.method\r\n @impl.implemented\r\n GetName()\r\n {\r\n return this.name;\r\n }\r\n\r\n /** Sets the name callers look this set up by, coercing the value to a string. */\r\n @carbon.method\r\n @impl.implemented\r\n SetName(name)\r\n {\r\n this.name = String(name);\r\n }\r\n\r\n /**\r\n * Replaces both the set name and its whole locator list with copies of the\r\n * given locators.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n Set(name, locators)\r\n {\r\n this.SetName(name);\r\n this.locators = locators.map(locator => Locator.from(locator));\r\n }\r\n\r\n /**\r\n * Overwrites the locator at an index from a plain value, defaulting a missing\r\n * scale to zero and a missing bone index to 0; an index outside the list is\r\n * ignored.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n SetLocator(index, value)\r\n {\r\n const existing = this.locators[index];\r\n if (existing)\r\n {\r\n existing.SetValues({\r\n position: value.position,\r\n direction: value.direction,\r\n scale: value.scale ?? [0, 0, 0],\r\n boneIndex: value.boneIndex ?? 0\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Squared length of a three-component value, used to test an offset for being\r\n * zero without a square root.\r\n */\r\n static #lengthSq(value)\r\n {\r\n return value[0] * value[0] + value[1] * value[1] + value[2] * value[2];\r\n }\r\n}\r\n"],"names":["UNIT_Y","vec3","fromValues","POSE_BONE_SCRATCH","mat4","create","EveGetLocatorPose","outPosition","outDirection","animationUpdater","locator","copy","position","transformQuat","direction","boneIndex","IsInitialized","GetMeshBoneCount","bones","GetMeshBoneMatrixList","length","MatrixCopyFrom3x4","transformMat4","x","y","z","_EveLocatorSets","_identity","EveLocatorSets","CjsModel","e","_init_locators","_init_extra_locators","_init_name","_init_extra_name","_initProto","c","_initClass","_applyDecs","type","define","className","family","io","persist","list","string","carbon","method","impl","implemented","adapted","constructor","args","locators","name","Translate","offset","add","Append","push","Locator","from","HasName","String","GetLocators","GetName","SetName","Set","map","SetLocator","index","value","existing","SetValues","scale","#lengthSq"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EveLocatorSets.js","sources":["../../../../../src/trinity/eve/locator/EveLocatorSets.js"],"sourcesContent":["// Source: trinity/trinity/Eve/SpaceObject/Utils/EveLocatorSets.h\r\n// Source: trinity/trinity/Eve/SpaceObject/Utils/EveLocatorSets.cpp\r\nimport { mat4 } from \"#math/mat4\";\r\nimport { vec3 } from \"#math/vec3\";\r\nimport { CjsModel } from \"#model\";\r\nimport { carbon, CjsSchema, impl, io, type } from \"#schema\";\r\nimport { MatrixCopyFrom3x4 } from \"../lights/lightConversion.js\";\r\nimport { Locator } from \"./Locator.js\";\r\n\r\nconst UNIT_Y = vec3.fromValues(0, 1, 0);\r\nconst POSE_BONE_SCRATCH = mat4.create();\r\n\r\n/**\r\n * Resolves a locator to its posed position and direction, transformed by the\r\n * animation updater's mesh bone when the locator is bone-attached.\r\n *\r\n * Carbon `EveGetLocatorPose` (EveLocatorSets.cpp:11-27). The direction is +Y\r\n * rotated by the authored quaternion. Carbon assumes bone 0 is unanimated for\r\n * performance, so only `boneIndex > 0` applies a bone matrix, and the\r\n * direction is deliberately NOT normalized here - the merged-damage caller in\r\n * EveSpaceObject2 normalizes after its own transform, and other callers take\r\n * the raw basis-transformed value.\r\n *\r\n * @param {Float32Array} outPosition - receives the object-space position\r\n * @param {Float32Array} outDirection - receives the unnormalized direction\r\n * @param {Object|null} animationUpdater - Tr2GrannyAnimation or null\r\n * @param {Object} locator - a Locator record\r\n */\r\nexport function EveGetLocatorPose(outPosition, outDirection, animationUpdater, locator)\r\n{\r\n vec3.copy(outPosition, locator.position);\r\n vec3.transformQuat(outDirection, UNIT_Y, locator.direction);\r\n\r\n if (locator.boneIndex > 0 && animationUpdater && animationUpdater.IsInitialized() &&\r\n locator.boneIndex < animationUpdater.GetMeshBoneCount())\r\n {\r\n const bones = animationUpdater.GetMeshBoneMatrixList();\r\n // Carbon leaves the outputs caller-uninitialized when the palette is\r\n // absent; CarbonEngineJS keeps the unskinned values instead.\r\n if (!bones || (locator.boneIndex + 1) * 12 > bones.length) return;\r\n MatrixCopyFrom3x4(POSE_BONE_SCRATCH, bones, locator.boneIndex);\r\n vec3.transformMat4(outPosition, locator.position, POSE_BONE_SCRATCH);\r\n const [ x, y, z ] = outDirection;\r\n outDirection[0] = POSE_BONE_SCRATCH[0] * x + POSE_BONE_SCRATCH[4] * y + POSE_BONE_SCRATCH[8] * z;\r\n outDirection[1] = POSE_BONE_SCRATCH[1] * x + POSE_BONE_SCRATCH[5] * y + POSE_BONE_SCRATCH[9] * z;\r\n outDirection[2] = POSE_BONE_SCRATCH[2] * x + POSE_BONE_SCRATCH[6] * y + POSE_BONE_SCRATCH[10] * z;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Named group of locators that a space object publishes for turrets, effects and\r\n * distributions to attach to.\r\n */\r\n@type.define({\r\n className: \"EveLocatorSets\",\r\n family: \"eve/utils\"\r\n})\r\nexport class EveLocatorSets extends CjsModel\r\n{\r\n @io.persist\r\n @type.list(\"Locator\")\r\n locators = [];\r\n\r\n @io.persist\r\n @type.string\r\n name = \"\";\r\n\r\n /**\r\n * Shifts the position of every locator in the set by an offset, doing nothing\r\n * for a zero offset.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n Translate(offset)\r\n {\r\n if (EveLocatorSets.#lengthSq(offset) === 0)\r\n {\r\n return;\r\n }\r\n for (const locator of this.locators)\r\n {\r\n vec3.add(locator.position, locator.position, offset);\r\n }\r\n }\r\n\r\n /**\r\n * Appends copies of the given locators, so the set never aliases the caller's\r\n * records.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n Append(locators)\r\n {\r\n for (const locator of locators)\r\n {\r\n // A value copy, live or plain: from() takes values only.\r\n const copy = new Locator();\r\n CjsSchema.copy(copy, locator);\r\n this.locators.push(copy);\r\n }\r\n }\r\n\r\n /**\r\n * Reports whether the set carries exactly this name; set lookups are an exact\r\n * string match.\r\n */\r\n @carbon.method\r\n @impl.implemented\r\n HasName(name)\r\n {\r\n return this.name === String(name);\r\n }\r\n\r\n /** Returns the set's live locator list, not a copy. */\r\n @carbon.method\r\n @impl.implemented\r\n GetLocators()\r\n {\r\n return this.locators;\r\n }\r\n\r\n /** Returns the name callers look this set up by. */\r\n @carbon.method\r\n @impl.implemented\r\n GetName()\r\n {\r\n return this.name;\r\n }\r\n\r\n /** Sets the name callers look this set up by, coercing the value to a string. */\r\n @carbon.method\r\n @impl.implemented\r\n SetName(name)\r\n {\r\n this.name = String(name);\r\n }\r\n\r\n /**\r\n * Replaces both the set name and its whole locator list with copies of the\r\n * given locators.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n Set(name, locators)\r\n {\r\n this.SetName(name);\r\n // A value copy of each locator, live or plain - Carbon copies the vector by\r\n // value. from() takes values only, so a live Locator is copied explicitly.\r\n this.locators = locators.map(locator =>\r\n {\r\n const copy = new Locator();\r\n CjsSchema.copy(copy, locator);\r\n return copy;\r\n });\r\n }\r\n\r\n /**\r\n * Overwrites the locator at an index from a plain value, defaulting a missing\r\n * scale to zero and a missing bone index to 0; an index outside the list is\r\n * ignored.\r\n */\r\n @carbon.method\r\n @impl.adapted\r\n SetLocator(index, value)\r\n {\r\n const existing = this.locators[index];\r\n if (existing)\r\n {\r\n existing.SetValues({\r\n position: value.position,\r\n direction: value.direction,\r\n scale: value.scale ?? [0, 0, 0],\r\n boneIndex: value.boneIndex ?? 0\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Squared length of a three-component value, used to test an offset for being\r\n * zero without a square root.\r\n */\r\n static #lengthSq(value)\r\n {\r\n return value[0] * value[0] + value[1] * value[1] + value[2] * value[2];\r\n }\r\n}\r\n"],"names":["UNIT_Y","vec3","fromValues","POSE_BONE_SCRATCH","mat4","create","EveGetLocatorPose","outPosition","outDirection","animationUpdater","locator","copy","position","transformQuat","direction","boneIndex","IsInitialized","GetMeshBoneCount","bones","GetMeshBoneMatrixList","length","MatrixCopyFrom3x4","transformMat4","x","y","z","_EveLocatorSets","_identity","EveLocatorSets","CjsModel","e","_init_locators","_init_extra_locators","_init_name","_init_extra_name","_initProto","c","_initClass","_applyDecs","type","define","className","family","io","persist","list","string","carbon","method","impl","implemented","adapted","constructor","args","locators","name","Translate","offset","add","Append","Locator","CjsSchema","push","HasName","String","GetLocators","GetName","SetName","Set","map","SetLocator","index","value","existing","SetValues","scale","#lengthSq"],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ import { Tr2EffectStateManager as _Tr2EffectStateManage } from '../../shader/Tr2
|
|
|
31
31
|
import { CarbonVertexElements } from '../../core/vertex/vertexUsage.js';
|
|
32
32
|
import { RawData } from '../../core/rawData/RawData.js';
|
|
33
33
|
import { TR2_PICK_TYPE_DEFAULT, Tr2PickType } from '../../core/view/Tr2PickType.js';
|
|
34
|
-
import { IEveSpaceObject2ParentData
|
|
34
|
+
import { IEveSpaceObject2ParentData } from './IEveSpaceObject2ParentData.js';
|
|
35
35
|
import { EveCustomMask as _EveCustomMask } from '../EveCustomMask.js';
|
|
36
36
|
import { EveCollectAreas } from '../child/EveSpaceObjectChild.js';
|
|
37
37
|
import { EveLocatorSets as _EveLocatorSets, EveGetLocatorPose } from '../locator/EveLocatorSets.js';
|
|
@@ -313,6 +313,9 @@ new class extends _identity {
|
|
|
313
313
|
// (cpp:3747 takes the world translation out of the STORED transposed matrix).
|
|
314
314
|
// Carbon's paired m_perObjectDataVs/m_perObjectDataPs GPU buffers are the
|
|
315
315
|
// engine's business; Invalidate on these records carries the same signal.
|
|
316
|
+
/** The ParentData Carbon builds on the stack for the decal pass
|
|
317
|
+
* (EveSpaceObject2.cpp:1696), held here so the pass does not allocate. */
|
|
318
|
+
#decalParentData = new IEveSpaceObject2ParentData();
|
|
316
319
|
#vsData = RawData.create("EveSpaceObjectVSData");
|
|
317
320
|
#psData = RawData.create("EveSpaceObjectPSData");
|
|
318
321
|
|
|
@@ -658,7 +661,7 @@ new class extends _identity {
|
|
|
658
661
|
* attachment reading it sees the hull's current coefficients.
|
|
659
662
|
* @param {Object} [out] - caller-owned record, refreshed in place
|
|
660
663
|
*/
|
|
661
|
-
GetParentData(out = new
|
|
664
|
+
GetParentData(out = new IEveSpaceObject2ParentData()) {
|
|
662
665
|
mat4.copy(out.transform, this.worldTransform);
|
|
663
666
|
// Carbon memsets the record and never assigns killCount on this path.
|
|
664
667
|
out.killCount = 0;
|
|
@@ -874,6 +877,16 @@ new class extends _identity {
|
|
|
874
877
|
for (const child of this.effectChildren) {
|
|
875
878
|
child?.UpdateVisibility(updateContext, this.worldTransform, this.#lodLevelWithChildren);
|
|
876
879
|
}
|
|
880
|
+
|
|
881
|
+
// Carbon cpp:1694-1706: the decals take one ParentData built for the pass,
|
|
882
|
+
// after the mesh bone palette when the updater has one.
|
|
883
|
+
if (this.#isMeshVisible) {
|
|
884
|
+
const parentData = this.GetParentData(this.#decalParentData);
|
|
885
|
+
for (const decal of this.decals) {
|
|
886
|
+
if (boneCount) decal.SetBoneMatrix(bones, boneCount);
|
|
887
|
+
decal.UpdateVisibility(updateContext, parentData);
|
|
888
|
+
}
|
|
889
|
+
}
|
|
877
890
|
if (this.mesh && this.#boundingSphereWorldRadius > 0) {
|
|
878
891
|
_EveSpaceObject.#SetSphere(_EveSpaceObject.#worldSphere, this.modelWorldPosition, this.#boundingSphereWorldRadius);
|
|
879
892
|
this.#meshScreenSize = _EveSpaceObject.#GetEstimatedPixelSize(frustum, _EveSpaceObject.#worldSphere) * lodFactor;
|